Em uma base de dados executada no PostgreSQL Versão 12, mant...

Próximas questões
Com base no mesmo assunto
Q4327326 Banco de Dados
Em uma base de dados executada no PostgreSQL Versão 12, mantida para apoiar uma aplicação institucional, a equipe de tecnologia pretende criar uma rotina armazenada que execute, no servidor de banco de dados, uma operação de atualização sem retorno tabular para a aplicação. A rotina deverá ser definida como uma procedure, receber um parâmetro inteiro de entrada, utilizar a linguagem procedural PL/pgSQL, conter o comando de atualização em um bloco procedural e ser posteriormente invocada pela aplicação. Durante a revisão da implementação, foram apresentadas diferentes formas de definir e executar essa rotina. Considerando a situação hipotética descrita, assinale a alternativa compatível com os requisitos apresentados.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: D

Fundamento decisivo: Como o enunciado exige uma procedure no PostgreSQL 12, era decisivo que a alternativa definisse e invocasse esse tipo de rotina conforme a sintaxe do sistema; por isso, D é a correta.

Tema central: Procedures no PostgreSQL 12
Análise das alternativas
A
Errada
Coloca BEGIN...END diretamente após a assinatura, sem LANGUAGE plpgsql e sem fornecer o corpo textual por meio de AS. Essa definição não corresponde à sintaxe exigida no PostgreSQL 12; o CALL posterior não corrige o erro de criação.
B
Errada
DELIMITER não integra a sintaxe SQL de definição de procedures do PostgreSQL 12. Além disso, faltam LANGUAGE plpgsql e a definição textual do corpo em AS: a troca de delimitadores não substitui esses elementos.
C
Errada
Cria uma função RETURNS void, chamada coerentemente por SELECT, enquanto o requisito é criar uma procedure. O erro está no tipo de rotina escolhido, não no uso de UPDATE nem na ausência de RETURN explícito, que não tornam essa função inválida.
D
Certa
Em D, LANGUAGE plpgsql identifica a linguagem, e AS $$...$$ fornece o corpo textual com o UPDATE dentro do bloco BEGIN...END. Esse comando de atualização pode ser escrito diretamente no bloco, sem SQL dinâmico nem tratamento de resultado tabular. O parâmetro p_id integer atende à exigência de entrada mesmo sem IN explícito, e CALL rotina_atualizacao(10) é a forma correta de invocar a procedure. A ausência de RETURN explícito não impede que ela termine normalmente.
Pegadinha da questão
A ausência de IN em D pode sugerir que falta um parâmetro de entrada, mas IN é o modo padrão. Já RETURNS void em C não transforma a função em procedure: não retornar um valor útil não elimina a distinção entre os tipos de rotina.
Dica para questões semelhantes
  • Confira primeiro o tipo de rotina exigido: CREATE FUNCTION não atende a uma solicitação expressa de CREATE PROCEDURE.
  • Para a definição apresentada em PL/pgSQL no PostgreSQL 12, verifique LANGUAGE plpgsql e o corpo textual em AS, contendo o bloco BEGIN...END.
  • Considere IN quando o modo do parâmetro estiver omitido e use CALL para invocar a procedure.
  • Não rejeite uma função RETURNS void apenas por executar UPDATE ou terminar sem RETURN explícito.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Gabarito: D ✅

No PostgreSQL, uma procedure em PL/pgSQL é criada assim:

CREATE PROCEDURE rotina_atualizacao(p_id integer)

LANGUAGE plpgsql

AS $$

BEGIN

  UPDATE tabela_operacional

  SET situacao = 'PROCESSADA'

  WHERE id = p_id;

END;

$$;

CALL rotina_atualizacao(10);

  • PROCEDURE → CALL
  • FUNCTION → SELECT
  • DELIMITER → MySQL, não PostgreSQL

-> Logo, D é a correta.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo