如何创建Oracle全局类型并在PL/SQL中使用它?

如何创建Oracle全局类型并在PL/SQL中使用它?,oracle,plsql,Oracle,Plsql,过程或函数中声明的Oracle记录类型是本地的,因此只能在本地使用。如何声明一个全局的记录类型,该记录类型可以在DB的所有过程和函数中全局使用?RECORD类型不能作为单独的模式对象创建,因此要使记录类型公开,该类型通常在包规范中声明,或仅在该包的范围内可用的包体 在包中使用对象类型的基本示例 CREATE OR REPLACE TYPE test_rec IS OBJECT ( ID VARCHAR2(30) ,TYPE VARCHAR2

过程或函数中声明的Oracle记录类型是本地的,因此只能在本地使用。如何声明一个全局的记录类型,该记录类型可以在DB的所有过程和函数中全局使用?

RECORD
类型不能作为单独的模式对象创建,因此要使
记录
类型公开,该类型通常在包规范中声明,或仅在该包的范围内可用的包体

在包中使用对象类型的基本示例

CREATE OR REPLACE TYPE test_rec IS OBJECT
(
 ID             VARCHAR2(30)
 ,TYPE               VARCHAR2(30)
);
/

CREATE OR REPLACE TYPE test_NT AS TABLE OF test_rec;
/

declare
 v_test_NT   test_NT;

begin
select test_rec (id
                ,type
                 )
        BULK COLLECT INTO v_test_NT  
 FROM test ;

--use it as you want

end;

@centurion:如果您想要记录类型,请创建记录的数据库对象类型,然后创建对象类型的嵌套表。这样您就可以在包中使用它。最好选择一个位置发布问题。这是在DBA.SE上交叉发布的--谢谢。这并不完全是我希望找到的:),因为它涉及到创建或嵌套表以及遍历集合,即使只有一条记录。当使用pl/sql记录类型时,您只需创建一个类型并使用它。很抱歉,上面的示例是错误的。不能在这样的包中使用对象。好吧,只需编译并查看错误。您的示例在包外工作得很好,但在包内却不行。@Petar:您能分享一下,您是如何创建包的吗?因为我没有遇到任何编译问题