Questão nº 22
Questão de Tecnologia da Informação · FCC TRT15 2024 (nº 22)
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.
CREATE FUNCTION atualizar_status_processo(num_processo VARCHAR) RETURNS INTEGER AS $$
DECLARE
total INTEGER;
BEGIN
UPDATE t_processos
SET status_processo = 'Encerrado'
WHERE numero_processo = num_processo;
SELECT COUNT(*) INTO total FROM t_processos WHERE status_processo = 'Encerrado';
RETURN total;
END;
$$ LANGUAGE plpgsql;
Em condições ideais, esta função seria corretamente chamada utilizando-se o comando:
- A`CALL atualizar_status_processo('12345-67.2023.5.01.0001');`
- B`EXECUTE atualizar_status_processo('12345-67.2023.5.01.0001');`
- C
DO $$ BEGIN PERFORM atualizar_status_processo('12345-67.2023.5.01.0001'); END; $$ LANGUAGE plpgsql; - D`SELECT atualizar_status_processo('12345-67.2023.5.01.0001');` (alternativa correta)
- E`EXEC atualizar_status_processo '12345-67.2023.5.01.0001';`
Resposta comentada
Gabarito Alternativa D
Para chamar uma função no PostgreSQL que retorna um valor, você a utiliza como parte de uma instrução SELECT, como se fosse uma coluna ou uma expressão.
- (A) Incorreta: O comando
CALLé utilizado para executar procedimentos (introduzidos no PostgreSQL 11), não funções. A estrutura fornecida é umaFUNCTION. - (B) Incorreta: O comando
EXECUTEé usado para executar SQL dinâmico (uma string de comando) ou em outros sistemas de banco de dados para chamar rotinas, mas não é a forma padrão para chamar uma função PL/pgSQL diretamente no PostgreSQL. - (C) Incorreta: Embora este bloco
DO $$...$$execute a função, o comandoPERFORMé usado dentro de blocos PL/pgSQL para executar uma função ou consulta e descartar seu resultado. Como a funçãoatualizar_status_processoretorna umINTEGER, a forma mais adequada de chamá-la e visualizar seu retorno seria comSELECT. Além disso,DO $$...$$é um bloco anônimo, não uma chamada direta da função. - (D) Correta: Esta é a forma padrão e mais idiomática de chamar uma função no PostgreSQL que retorna um valor. O comando
SELECTexibirá o valor inteiro retornado pela função. - (E) Incorreta: O comando
EXECnão é um comando válido para chamar funções diretamente no PostgreSQL. É comum em outros sistemas de banco de dados, como o SQL Server.- Armadilha da banca (distrator mais tentador): As alternativas (A) e (E) são as mais tentadoras porque
CALLeEXECsão comandos comuns para executar rotinas em outros sistemas de banco de dados (como SQL Server ou Oracle). A armadilha reside em confundir a sintaxe de chamada de funções e procedimentos entre diferentes bancos de dados ou em não distinguir claramente entreFUNCTIONePROCEDUREno PostgreSQL. Lembre-se:FUNCTIONcomSELECT,PROCEDUREcomCALL.
- Armadilha da banca (distrator mais tentador): As alternativas (A) e (E) são as mais tentadoras porque
Fonte: FCC TRT15 2024 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.