小编典典

查询嵌套表

sql

我正在尝试查询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;

阅读 238

收藏
2021-04-14

共1个答案

小编典典

我不明白您遇到的具体错误,但是通常您需要在SQL语句中包括对适当类型的显式强制转换:

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

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

同样,这仅在类型(t_pontos)在模式级别(即,使用CREATE TYPE语句)中声明的情况下有效。如果在PL /
SQL代码的某处(例如在包规范中)声明了它,则SQL引擎将无法访问类型定义。

2021-04-14