Questão de Banco de Dados — Procedimentos armazenados (Stored Procedures) — VUNESP 2024
Banco de Dados›Procedimentos 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:
ALOCAL e GLOBAL.
BBEFORE e AFTER.
CNONE e ALL.
DIN e OUT.
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.
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.