【问题标题】:Why can't I can't I use my Oracle user defined type like this?为什么我不能像这样使用我的 Oracle 用户定义类型?
【发布时间】:2010-10-26 11:27:39
【问题描述】:

在一个 Oracle 包中我定义了一个类型

type setTable is table of my_sets.pkey%type;

在包声明中(非正文部分)。引用的pkey 列是number(38)。然后在包体中的一个函数中我有

...
with d as (select column_value from table(sets)),
...

其中setssettable 类型函数的参数。此行无法编译并出现错误“ORA-22905:无法访问非嵌套表项中的行”。我该怎么做才能解决这个问题?

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    select 语句是 SQL 而不是 PL/SQL,SQL 引擎只能使用服务器上定义的类型,如下所示:

    create type setObj is object (<attributes>);
    create type setTable is table of setObj;
    

    【讨论】:

    • Pip Falconer 的一个小补充:DB 定义的类型不仅可以是object,还可以是table of...varray
    • 我的意思是我的原始版本可以在 11g 中使用吗?我相信你的将在任何地方工作。我有两个系统,而我的一个似乎正在一个(11g)上编译。
    • 哦,对了,即使在 11G 中,也不能在 SELECT 语句中使用任何 PL/SQL 集合——它们只是在 SQL 级别不“存在”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多