查询嵌套表

时间:2012-02-23 21:25:40

标签: sql oracle plsql oracle11g

我正在尝试使用NESTED TABLE查询PL/SQL(我可以通过多个来源告知)但我仍然收到错误消息: ORA-21700:对象不存在或标记为删除。 ..

我不明白为什么它不会让我这样做...我已经确定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;

2 个答案:

答案 0 :(得分:6)

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

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

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

此外,这仅适用于在架构级别声明类型(t_pontos),即使用CREATE TYPE语句。如果它在PL / SQL代码中的某处声明,例如在包规范中,SQL引擎无法访问类型定义。

答案 1 :(得分:1)

尝试在程序开头定义光标,然后在程序正文中打开它。