sql - 查询嵌套表

标签 sql oracle plsql oracle11g

我正在尝试使用 PL/SQL 查询 NESTED TABLE(有几个消息来源告诉我这是可能的),但我一直收到错误消息消息:ORA-21700:对象不存在或被标记为删除。..

我不明白为什么它不允许我这样做...我已经确定 dados 变量中有内容...我输出它的 。计数,它不是空的..有人可以帮我解释一下吗??

提前谢谢...

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;

最佳答案

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

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

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

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

关于sql - 查询嵌套表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421581/

相关文章:

oracle - 使用 pl/sql dom 解析器解析 XML 的最简单方法

oracle - USER() 和 SYS_CONTEXT ('USERENV' ,'CURRENT_USER' 有什么区别?

SQL 连接问题 : Third table's fields not displaying in Excel but in SQL

java - 来自 weblogic 的数据库连接

php - MySQL 连接另一个表

oracle - ADO.NET,在没有事先提交或回滚的情况下关闭 OracleConnection : Will it leak?

oracle - PL/SQL异常处理

plsql - 打开、获取多个变量

c++ - 为日期查找维度表填充加载文件的最佳方法是什么?

sql - BETWEEN 和 IN 与 MySQL 或一般 SQL 之间是否存在性能差异?