Execute Immediate retornar Sys_RefCursor

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
viniciosacampos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Sex, 13 Mar 2015 10:48 am
Att,

Vinícios Campos

Boa Tarde,

Estou com um problema e não sei se o Oracle é permitido esta ação.

Tenho um Sql dinâmico que executa uma chamada na procedure com retorno Sys_refcursor.

Só que na minha procedure que executo este Sql, não estou conseguindo este retorno.

É possivel cursores, tables pelo sql dinâmico?

Obrigado.

Selecionar tudo

create or replace procedure Teste is

  v_long      long;
  p_gridradar sys_refcursor;

begin

  v_long := '
     declare

      p_gridradar    sys_refcursor;

      begin

          ppd_teste.sp_consulta(p_gridradar       => :p_gridradar);

      end;';

  execute immediate v_long
    using p_gridradar;

end;
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

É possível sim criar uma função com retorno SYS_REFCURSOR e após executar sua chamada no cursor:

FUNÇÃO QUE RETORNA SYS_REFCURSOR:

Selecionar tudo

CREATE OR REPLACE FUNCTION emp_by_job (p_job VARCHAR2,p_deptno NUMBER,pv_table VARCHAR2)
RETURN SYS_REFCURSOR
IS
    emp_refcur      SYS_REFCURSOR;
BEGIN
    OPEN emp_refcur FOR 
    'SELECT empno, ename FROM '||pv_table||'  WHERE job = '||''''||p_job||''''||' and deptno= ' ||p_deptno; --Dynamic String where table name column values are parameters
    RETURN emp_refcur;
END;
EXECUÇÂO DO SYS_REFCURSOR NUMA PROCEDURE:

Selecionar tudo

DECLARE
  emp_refcur_local      SYS_REFCURSOR;
  empno NUMBER(4);
  ename VARCHAR2(30);
BEGIN
  --Calling the function using parameters
  emp_refcur_local:=emp_by_job('MANAGER',10,'EMP');
  LOOP
  FETCH emp_refcur_local into empno,ename;
    EXIT WHEN  emp_refcur_local%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('Employee no: '||empno||'/ Employee name: '||ename);
  END LOOP;
END;
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes