Considere que exista um banco de dados PostgreSQL aberto e f...

Próximas questões
Com base no mesmo assunto
Q3290560 Banco de Dados
Considere que exista um banco de dados PostgreSQL aberto e funcionando em condições ideais, e que a tabela t_processos exista e esteja corretamente preenchida com valores adequados. Neste contexto, observe a função abaixo.  
Imagem associada para resolução da questão
Em condições ideais, esta função seria corretamente chamada utilizando-se o comando: 
Alternativas

Comentários

Veja os comentários dos nossos alunos

✅ Alternativa correta: D

A função atualizar_status_processo é definida com RETURNS INTEGER, ou seja, retorna um valor.

Em PostgreSQL, funções que retornam valores devem ser chamadas usando SELECT.

A) ❌ Errado no PostgreSQL nesse contexto.

CALL é usado para procedures (sem retorno), ou seja, quando a função retorna VOID.

Nossa função retorna um INTEGER, então SELECT é obrigatório.

B) ❌ EXECUTE em PostgreSQL é usado dentro de blocos dinâmicos PL/pgSQL, não diretamente no SQL.

Não é usado fora de blocos DO, FUNCTION ou PROCEDURE.

C) ❌ PERFORM é usado para ignorar o valor de retorno, o que não é o esperado aqui, pois queremos obter o total de processos encerrados.

Além disso, o uso de DO é mais indicado para scripts internos e não para chamadas simples de função.

E) ❌ Sintaxe incorreta e mistura de dialetos:

  • EXEC é típico do SQL Server, não do PostgreSQL.
  • As aspas também estão erradas.

Fonte: ChatGPT.

Funções que retornam valores (como esta, que retorna INTEGER) são chamadas com SELECT.

Alternativas:

  • (A) CALL: só é usado com procedures, não com funções que retornam valores.
  • (B) EXECUTE: usado dentro de comandos dinâmicos.
  • (C) DO...PERFORM: possível, mas desnecessariamente complexo; PERFORM é usado para funções sem retorno ou cujo retorno será ignorado.
  • (E) EXEC: sintaxe inválida em PostgreSQL.

Portanto, gabarito: D

By Futur DEV Estável.

No PostgreSQL, quando uma função retorna algum valor (número, texto, etc.), nós a chamamos exatamente como se estivéssemos consultando uma coluna: usando SELECT.

Então de cara nenhuma das outras alternativas se enquadram nesse tipo de questão.

Resposta D)

D executa a função e mostra o retorno. Atenção: C também executa validamente, mas descarta o resultado.

A função recebe o processo, altera seu status para 'Encerrado' e retorna a contagem de TODOS os processos encerrados da tabela, não só das linhas alteradas.

A) INCORRETA — CALL é para procedure

O código usa CREATE FUNCTION, não CREATE PROCEDURE. Uma função pode fazer UPDATE e continuar sendo função.

Correção:

SELECT atualizar_status_processo('12345-67.2023.5.01.0001');

B) INCORRETA NO CONTEXTO — EXECUTE exige preparação

O EXECUTE do SQL PostgreSQL roda uma instrução criada antes com PREPARE; não chama diretamente uma função. Essa preparação não foi informada.

Exemplo válido:

PREPARE p(VARCHAR) AS SELECT atualizar_status_processo($1);

EXECUTE p('12345-67.2023.5.01.0001');

C) TECNICAMENTE VÁLIDA — executa sem exibir o retorno

DO $$

BEGIN

PERFORM atualizar_status_processo('12345-67.2023.5.01.0001');

END;

$$ LANGUAGE plpgsql;

DO executa um bloco anônimo; PERFORM chama a função e descarta o INTEGER retornado. O UPDATE acontece normalmente. LANGUAGE após o bloco é válido.

PERFORM não exige função com retorno void. Pelo enunciado “corretamente chamada”, C também funciona. Se a intenção fosse exibir o retorno, seria D: há ambiguidade na redação.

D) CORRETA — chama e apresenta o valor

SELECT atualizar_status_processo('12345-67.2023.5.01.0001');

SELECT executa a função e mostra o INTEGER retornado. Isso não impede o UPDATE interno.

Exemplo: havia 4 processos encerrados e a função encerrou mais um; retorna 5.

E) INCORRETA — EXEC e aspas erradas

EXEC não é a chamada SQL nativa do PostgreSQL para essa função. A alternativa também abre aspas simples e fecha aspas duplas. Corrigir só as aspas não basta: use SELECT e o argumento entre parênteses, como em D.

MEMORIZE

Função + retorno visível: SELECT.

Função + retorno descartado em PL/pgSQL: PERFORM.

Procedure: CALL.

Instrução preparada com PREPARE: EXECUTE.

Fonte: documentação PostgreSQL 14 — CALL, DO, EXECUTE e PERFORM:

https://www.postgresql.org/docs/14/plpgsql-statements.html

Clique para visualizar este comentário

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