BUSCAR DADOS DO CURSOR

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
Ros
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 19 Mar 2008 9:57 am
Localização: Porto Alegre - RS

Olá pessoal,

Estou desenvolvendo um testador de pl, porém há alguns probleminhas.

Eu tenho procedimentos e funções, e os mesmos podem retornar o mais variado tipo de dado inclusive cursor ( Sys_Refcursor). Mas tem um detalhe, eu nunca sei o que será retornado do cursor (pode ser n informações), logo acredito que o fech não seja uma opção.

Não tenho como especificar os campos retornado pelo cursor!

pois bem, se alguém tiver alguma sugestão. Já conversei com muuiitass pessoas mas sem sucesso..


Valeu pessoal!! Estarei ansiosa no aguado de um retorno.

Abraços
ruevers
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 324
Registrado em: Sex, 02 Jun 2006 1:48 pm
Localização: sp
Contato:

Acho que pode tentar usar bind variables....pelo menos no pro C dá, no plsql também deve dar.
Ros
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 19 Mar 2008 9:57 am
Localização: Porto Alegre - RS

Valeu ruevers!

Vou terminar os meus testes aqui...senão rolar vou tentar da forma que você disse! Obrigada pelo tok
Ros
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qua, 19 Mar 2008 9:57 am
Localização: Porto Alegre - RS

acho que estou errando em alguma coisa...derrepente alguém pode ajudar-me..

O que está abaixo é um modelo que peguei na net e "resolve" parte da situação. O detalhe é que não vou mandar um select, e sim um cursor que foi retornado por uma pl(proc/func)

Com o DBMS_SQL.PARSE eu tenho que mandar um select, não consequi fazer mandando um cursor.

Tentei algumas formas mas sem sucesso.
Tipo:

cursor l_thecursor is
Select *
From admin_package;

e dentro do begin coloquei:

open l_thecursor;

Deu erros e não estou conseguindo de forma alguma.

Acho que o bind variable segue a mesma idéia qnt ao DBMS_SQL.

Bom, vou continuar tentando e aguardado colaborações.

Obgrigada!



declare
-- Local variables here

l_thecursor INTEGER DEFAULT DBMS_SQL.open_cursor;
l_columnvalue VARCHAR2(2000);
l_status INTEGER;
l_colcnt NUMBER DEFAULT 0;
l_separator VARCHAR2(10) DEFAULT '';
l_cnt NUMBER DEFAULT 0;
valor varchar2(1000);
begin
-- Test statements here
DBMS_SQL.parse(l_thecursor, 'select * from admin_package ', DBMS_SQL.native);
FOR i IN 1 .. 10
LOOP
BEGIN
DBMS_SQL.define_column(l_thecursor, i, l_columnvalue, 2000);
dbms_output.put_line ('# ' || l_columnvalue || '#');
l_colcnt := i;
EXCEPTION
WHEN OTHERS THEN
IF (SQLCODE = -1007)
THEN
EXIT;
ELSE
RAISE;
END IF;
END;
END LOOP;


DBMS_SQL.define_column(l_thecursor, 1, l_columnvalue, 2000);
l_status := DBMS_SQL.EXECUTE(l_thecursor);
LOOP
EXIT WHEN(DBMS_SQL.fetch_rows(l_thecursor) <= 0);
l_separator := '';
FOR i IN 1 .. l_colcnt
LOOP
DBMS_SQL.COLUMN_VALUE(l_thecursor, i, l_columnvalue);
dbms_output.put_line(l_columnvalue);
END LOOP;
l_cnt := l_cnt + 1;
END LOOP;
DBMS_SQL.close_cursor(l_thecursor);

end;
Responder
  • Informação
  • Quem está online

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