【发布时间】:2009-06-30 22:49:39
【问题描述】:
在 Oracle 数据库 10g 中,是否可以在包或过程之外创建关联数组类型?我希望能够做到这一点,以便我可以在另一种类型中引用这个关联数组类型。例如:
create type my_type_map is table of varchar2(10) index by varchar2(10);
create type my_other_type as object (
id number(15),
member procedure initialize(p_my_type_map my_type_map)
) not instantiable not final;
我得到的错误是:
SQL> create type my_type_map is table of varchar2(20) index by varchar2(10);
2 /
Warning: Type created with compilation errors.
SQL> show errors;
Errors for TYPE MY_TYPE_MAP:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/21 PLS-00355: use of pl/sql table not allowed in this context
SQL>
似乎甲骨文认为:
index by varchar2(10)
是 PL/SQL 并且不允许在创建 SQL 类型时使用它。如果 Oracle 确实不允许在包之外定义关联数组,那么有没有好的选择?是否可以在包内创建扩展 Oracle 对象的类型,以便在同一个包中定义所有类型?
谢谢, 杰夫
编辑:更正了代码示例,添加了日志,添加了可能的替代问题。
【问题讨论】:
-
什么时候出现错误?我刚刚创建了上述两种类型,没有受到 oracle 10gR2 的投诉。您的示例说 INDEX BY VARCHAR2,而不是 pls_integer...
-
添加了更多细节和更正。谢谢!