查询嵌套表

问题描述:

我试图用PL/SQL查询NESTED TABLE(可以通过几种方式告诉我),但我总是收到错误消息:ORA-21700:object is not exist or is标记为删除。 ..查询嵌套表

我不明白为什么它不会让我这样做......我已经确定dados变量有它的内容...我输出它的.count它不是空的..有人能帮我解释一下吗?

谢谢你是进步...

procedure PREENCHE_CURSOR_ESTRANG_TOTAL(O_CURSOR out t_refcur) is  

    c_nips t_refcur; 

    dados T_PONTOS := T_PONTOS();--nested table instantiating.. 

    i number; 

    nip number(8); 

    gerador_de_nips varchar2(600) := 'a biG SQL QUERY nobody needs to know about =P'; 


begin 
    i := 1; 
    open c_nips for gerador_de_nips; 
    loop 
     dados.extend; 
     fetch c_nips into nip; 
     exit when c_nips%notfound; 
     dados(i) := RETORNA_PONTOS(nip); 
     i := i+1; 

    end loop; 


    close c_nips; 

    open O_CURSOR for select * from table(dados); /*WHY*/ 


end PREENCHE_CURSOR_ESTRANG_TOTAL; 
+0

你可以发布'T_PONTOS'的定义吗?特别是,它是在SQL还是PL/SQL中声明的?另外,'RENTORNA_PONTOS'似乎不在任何地方定义。 – 2012-02-23 21:30:01

我不明白,你所得到的具体错误,但通常你需要包括一个明确的强制转换为适当类型的SQL语句:

open O_CURSOR for select * from table(CAST(dados AS t_pontos)); 

这是因为该语句从PL/SQL切换到SQL引擎进行处理,并且除用户定义的变量之外没有关于该变量类型的信息。

此外,只有在模式级别声明类型(t_pontos),即使用CREATE TYPE语句声明时,这才起作用。如果它是在PL/SQL代码中的某个地方声明的,例如在包规范中,SQL引擎不能访问类型定义。

尝试在程序开始处定义光标并在程序主体中打开它。