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

 


Responder a