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

Sair da versão mobile