Pular para o conteúdo

Como executar uma Function utilizando Execute Immediate

Como executar uma Function utilizando Execute Immediate

Oi meu caro amigo !
Estou tentando chamar uma function através do execute immediate, mas sem sucesso. Poderia me ajudar ?

José T.


Chamar functions através de execute immediate não é algo que costumo fazer, aliás, não lembro se algum dia precisei fazer algo do tipo. Felizmente, é algo tranquilo de se criar em PL/SQL. 🙂

Vamos começar com a nossa FUNCTION:

CREATE OR REPLACE FUNCTION f_teste
RETURN VARCHAR2 
IS
   v_retorno VARCHAR2(10) := 'OK';

BEGIN
   RETURN(v_retorno); 

END f_teste;
/

Function F_TESTE compilado

Agora vamos ao código de chamada utilizando EXECUTE IMMEDIATE. Para fazer isso, será necessário utilizar o parâmetro USING OUT para receber o resultado da execução da FUCTION.

DECLARE
   v_retorno VARCHAR2(10);

BEGIN
   EXECUTE IMMEDIATE
   'CALL f_teste() INTO :v_retorno'
   USING OUT v_retorno;

   DBMS_OUTPUT.put_line('Retorno: '|| v_retorno);

END;
/

Procedimento PL/SQL concluído com sucesso.

Retorno: OK

Existe outra maneira de chamarmos a function:

DECLARE
   v_plsql   VARCHAR2(2000);
   v_retorno VARCHAR2(10);

BEGIN
   v_plsql := 'BEGIN :v_retorno := f_teste(); END;'; 

   EXECUTE IMMEDIATE
   v_plsql USING OUT v_retorno;

   DBMS_OUTPUT.put_line('Retorno: '|| v_retorno);

END;
/

Procedimento PL/SQL concluído com sucesso.

Retorno: OK

É isso ! Espero ter ajudado !

Abraço

Sergio Willians

Sergio Willians

Sergio Willians é o fundador do GPO (Grupo de Profissionais Oracle) e possui quase 30 anos de experiência em tecnologias Oracle, sendo especialista em desenvolvimento Forms/Reports, PL/SQL e EBS (E-Business Suite) nos módulos Receivables, Payables e General Ledger. Atualmente trabalha na Scania Latin America, onde se dedica à área de integração de dados com Confluent Kafka. Sua paixão é compartilhar conhecimento com a comunidade Oracle, contribuindo para o crescimento e a excelência da plataforma.

Comentário(s) da Comunidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress