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" 
<[EMAIL PROTECTED]> 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

<*> 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