Cleber, Vc pode fazer o seguinte: crie uma package (somente espec) e declare sua tabela de registro lá. Segue exemplo: create or replace package xxx as type r_employees_type is record ( employee_id employees.employee_id%type , first_name employees.first_name%type , salary employees.salary%type); type tab_employees is table of r_employees_type index by binary_integer; end; Agora, sua procedure ficaria assim: create or replace procedure pr_teste(p_out out xxx.tab_employees ) is i pls_integer := 0; -- índice da tabela de registro indexada begin for x in (select employee_id, first_name, salary from employees) loop -- vc pode popular direto o parametro p_out se quiser p_out(i).employee_id := x.employee_id; p_out(i).first_name := x.first_name; p_out(i).salary := x.salary; i := i + 1;
end loop; end pr_teste; / No client, vc dever criar uma variável do mesmo tipo da criada na package acima para receber a tabela de registros indexada. declare v_tab xxx.tab_employees ; begin pr_teste(v_tab); -- para percorrer a tabela de registros indexada if nvl(v_tab.count,0) > 0 then for i in 1..v_tab.count loop if v_tab(i).salary > 100 then null; end if; end loop; end if; end; / Bom, espero que tenha sido claro e que tenha te ajudado. Qualquer dúvida, vai postando mensagens aí na lista, ok ? Um grande abraço, Rômulo Pedaes. Marcio R Portes <[EMAIL PROTECTED]> escreveu: Cleber, por que ao inves de tudo isso voce nao faz simplesmente: [Eu nao compilei o codigo] create or replace procedure pr_teste ( cursor0 out sys_refcursor ) as begin open cursor0 for select empno, ename, sal from emp; end; / var x refcursor exec pr_teste( :x ) print x copia e cola isso no sqlplus. Na sua aplicacao voce vai passar o x (ref cursor) para a procedure. abracos, -- Marcio Portes http://mportes.blogspot.com jlchiappa wrote: > Hmm, algo está estranho aí : vc está declarando uma table of (ie, uma > PL/SQL table) , e mais à frente está usando o método .EXTEND , que > tipicamente é usado com SQL TYPES , pois PL/SQL Tables são esparsas > (ie, só se criam os elementos que vc pede), portanto NÂO precisa > extender ???? Algo não está "batendo" bem nesse código, a impressão é > que vc está misturando o que é tipo PL/SQL com o que é tipo SQL .... > Sugiro que vc dê uma estudada na thread > http://asktom.oracle.com/pls/ask/f? > p=4950:8:::::F4950_P8_DISPLAYID:246014735810 pra discussão de tipos > SQL e PL/SQL (normalmente retornar um resultset pra array se faz em > tipo SQL, já que aí o banco conhece o tipo seja em SQL, seja em > PLSQL), e em http://asktom.oracle.com/pls/ask/f? > p=4950:8:::::F4950_P8_DISPLAYID:10369303150185 para as questões disso > em relação à dblinks. > > ==>> E importante : se é na mesma sessão que vc quer retornar o > resultset, a maneira APROPRIADA é via global temporary table, ** não > ** precisa de COISA ALGUMA dessas complicações, ** não ** tem limite > prático de tamanho, vc pode fazer TODA e QUALQUER manipulação via SQL > (inclusive ordenar, agrupar, etc, etc). > > > []s > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br, "Cleber Roberto Marques" > escreveu > >>Pessoal, boa tarde ! >> >>Estamos com um problemão aqui na empresa devido à uma PL Table. >> >>O Lance é que não conseguimos retornar os dados da mesma através de > > um cursor OUT. > >>Quando compilo a PROCEDURE (similar para teste) abaixo é dado o > > seguinte erro: > >>ORA-22905: cannot access rows from a non-nested table item >> >>E mesmo utilizando um cast no table do open cursor0 -- que seria > > assim: table(cast(v_employees_type as r_employees_type)) -- não > funciona, aí ele gera o erro: > >>ORA-00902: invalid datatype >> >>Alguém jah trabalhou com isso e teria alguma idéia? >> >>Obrigado! >> >> >>CREATE OR REPLACE PROCEDURE PR_TESTE (cursor0 OUT sys_refcursor) as >> >>TYPE r_employees_type IS RECORD ( >> employee_id employees.employee_id%type, >> first_name employees.first_name%type, >> salary employees.salary%type); >> >>type t_employees_type is table of r_employees_type; >> >>v_employees_type t_employees_type := t_employees_type(); >> >>c number; >> >>begin >> null; >> c:= 1; >> >> for x in (select employee_id, first_name, salary from > > employees) loop > >> v_employees_type.extend; >> v_employees_type(c).employee_id := x.employee_id; >> v_employees_type(c).first_name := x.first_name; >> v_employees_type(c).salary := x.salary; >> >> c:= c+1; >> end loop; >> >> open cursor0 for >> select >> employee_id, >> first_name, >> salary >> from >> table(v_employees_type); >> >> >>end; >> >> >>At. >>Cleber R. Marques >>Administrador de Bancos de Dados >>Programmers Informática Ltda > > > > > > ______________________________________________________________________ > > Cancelar assinatura...: [EMAIL PROTECTED] > Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] > Fernanda Damous [EMAIL PROTECTED] > Alisson Aguiar [EMAIL PROTECTED] > ______________________________________________________________________ > http://br.groups.yahoo.com/group/oracle_br/ > ______________________________________________________________________ > > Sair da Lista...: [EMAIL PROTECTED] > Links do Yahoo! Grupos > > > > > > > > ______________________________________________________________________ Cancelar assinatura...: [EMAIL PROTECTED] Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] Fernanda Damous [EMAIL PROTECTED] Alisson Aguiar [EMAIL PROTECTED] ______________________________________________________________________ http://br.groups.yahoo.com/group/oracle_br/ ______________________________________________________________________ Sair da Lista...: [EMAIL PROTECTED] Links do Yahoo! Grupos __________________________________________________ Converse com seus amigos em tempo real com o Yahoo! Messenger http://br.download.yahoo.com/messenger/ [As partes desta mensagem que não continham texto foram removidas] ______________________________________________________________________ Cancelar assinatura...: [EMAIL PROTECTED] Moderadores da lista....:Dorian Anderson Soutto [EMAIL PROTECTED] Fernanda Damous [EMAIL PROTECTED] Alisson Aguiar [EMAIL PROTECTED] ______________________________________________________________________ http://br.groups.yahoo.com/group/oracle_br/ ______________________________________________________________________ Sair da Lista...: [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html