Pular para o conteúdo principal

Questão de Banco de Dados — Procedimentos armazenados (Stored Procedures) — VUNESP 2024

Banco de DadosProcedimentos armazenados (Stored Procedures)
Código
vu212078
Banca
VUNESP
Órgão
Pref Piracicaba
Ano
2024
Cargo
Adm ( )

O comando de criação de procedures do Sistema Gerenciador de Banco de Dados PostgreSQL (14.4) tem um parâmetro denominado argmode, que admite quatro opções de valores, sendo duas dessas opções:

  1. ALOCAL e GLOBAL.
  2. BBEFORE e AFTER.
  3. CNONE e ALL.
  4. DIN e OUT.
  5. EROLE e USER.
Revelar gabarito e comentário

GabaritoD — IN e OUT.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Procedimentos armazenados no PostgreSQL: o parâmetro argmode

Gabarito: letra D. No PostgreSQL, o comando CREATE PROCEDURE aceita, para cada parâmetro, um modo de argumento (argmode) que define se ele é de entrada, saída ou ambos — e as quatro opções válidas são IN, OUT, INOUT e VARIADIC. A alternativa D traz exatamente duas dessas opções (IN e OUT), sendo a única correta.

O argmode é um conceito central na definição de procedures e funções em bancos de dados relacionais. Ele determina a direção do fluxo de dados de cada parâmetro: se o valor entra na procedure para ser processado, se sai dela como resultado, ou se faz as duas coisas. No PostgreSQL, a sintaxe completa de um parâmetro é [argmode] [argname] argtype, e quando o modo não é especificado, o padrão é IN. Os quatro modos aceitos são:

  • IN: parâmetro de entrada — o valor é passado para a procedure, mas não pode ser modificado dentro dela (na prática, é uma cópia).

  • OUT: parâmetro de saída — a procedure atribui um valor a ele, que é retornado ao chamador; não recebe valor de entrada.

  • INOUT: parâmetro de entrada e saída — recebe um valor, pode modificá-lo, e o valor final é retornado.

  • VARIADIC: parâmetro de entrada que aceita um número variável de argumentos (como um array).

Essa distinção é essencial porque procedures, ao contrário de funções, não retornam um valor diretamente com RETURN — elas comunicam resultados justamente pelos parâmetros OUT e INOUT. Por exemplo, uma procedure que calcula o dobro de um número poderia ser declarada como CREATE PROCEDURE dobra(IN x INT, OUT resultado INT) e, dentro do corpo, atribuir resultado := x * 2; — o chamador recebe o valor por resultado.

A banca explora aqui um conhecimento específico de sintaxe do PostgreSQL, mas o conceito de modos de parâmetro é comum a vários SGBDs (MySQL, Oracle, SQL Server), o que ajuda a eliminar as alternativas que trazem pares de palavras sem relação com esse contexto. As opções A, B, C e E usam termos de outros domínios (escopo de variáveis, triggers, privilégios de acesso), que não correspondem ao argmode.

Guarde a lista completa dos quatro modos — IN, OUT, INOUT, VARIADIC — e o significado de cada um: é exatamente esse conhecimento que separa a alternativa correta das demais.

1IN
parâmetro de entrada
não pode ser modificado
2OUT
parâmetro de saída
retorna valor ao chamador
3INOUT
entrada e saída
recebe, modifica e retorna
4VARIADIC
número variável de argumentos
argmode (PostgreSQL)
LEVELsoulevel.com.br
argmode (PostgreSQL): IN (parâmetro de entrada, não pode ser modificado); OUT (parâmetro de saída, retorna valor ao chamador); INOUT (entrada e saída, recebe, modifica e retorna); VARIADIC (número variável de argumentos)

Alternativa A — ❌ Incorreta

LOCAL e GLOBAL são palavras-chave usadas em outros contextos, como na declaração de variáveis temporárias em alguns SGBDs (ex.: DECLARE @var no SQL Server) ou na definição de escopo de tabelas temporárias. Não são modos de argumento de procedures no PostgreSQL.

Alternativa B — ❌ Incorreta

BEFORE e AFTER são palavras-chave usadas na definição de triggers (gatilhos), indicando se a ação deve ser disparada antes ou depois do evento (INSERT, UPDATE, DELETE). Não têm relação com o argmode de procedures.

Alternativa C — ❌ Incorreta

NONE e ALL não são modos de argumento válidos no PostgreSQL. ALL aparece em outros comandos SQL (como GRANT ALL), mas não na definição de parâmetros de procedures.

Alternativa D — ✅ Correta ⟵ GABARITO

IN e OUT são, de fato, dois dos quatro modos de argumento (argmode) aceitos pelo PostgreSQL na criação de procedures. IN indica parâmetro de entrada e OUT indica parâmetro de saída. Os outros dois são INOUT e VARIADIC.

Alternativa E — ❌ Incorreta

ROLE e USER são conceitos de administração de usuários e permissões no banco de dados (ex.: CREATE ROLE, CREATE USER), não modos de argumento de procedures.

NÃO CAIA NESSA!

A banca mistura termos de áreas diferentes do banco de dados para confundir: BEFORE/AFTER são de triggers, ROLE/USER são de segurança, LOCAL/GLOBAL são de escopo. O candidato que não domina a sintaxe exata do CREATE PROCEDURE pode se perder. A dica é memorizar os quatro modos (IN, OUT, INOUT, VARIADIC) e o que cada um faz — assim, qualquer alternativa com outros pares é eliminada de imediato.

Gabarito: letra D

Link permanente: /questoes/vu212078