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

Posted

技术标签:

【中文标题】如何创建一个 Oracle 全局类型并在 PL/SQL 中使用它?【英文标题】:How to create a Oracle global type and use it in PL/SQL? 【发布时间】:2012-10-08 10:07:14 【问题描述】:

在过程或函数中声明的 Oracle RECORD TYPE 是本地的,因此只能在本地使用。如何声明一个全局的 RECORD TYPE 并且可以在 DB 中全局的所有过程和函数中使用?

【问题讨论】:

最好选择一个位置发布问题。这是在 DBA.SE 上交叉发布的——dba.stackexchange.com/questions/25597/… 【参考方案1】:

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

【讨论】:

@centurion :如果你想要一个记录类型,创建一个记录的数据库对象类型,然后创建一个对象类型的嵌套表。然后你就可以在你的包。【参考方案2】:

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

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;

【讨论】:

谢谢。这不完全是我希望找到的:) 因为它涉及创建或嵌套表并遍历集合,即使只有一条记录。使用 pl/sql 记录类型时,您只需创建一个类型并使用它。 对不起,上面的例子是错误的。您不能像这样在 PACKAGE 中使用对象。好吧,只需编译并查看错误。您的示例在包外运行良好,但在包中却不行。 @Petar:你能分享一下你的制作包吗?因为我没有遇到任何编译问题

以上是关于如何创建一个 Oracle 全局类型并在 PL/SQL 中使用它?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 插件,Javascript - 如何仅为 JQuery 插件全局变量或 json 对象创建并在函数级别更改此(变量、对象)

如何使用 Oracle 全局临时表?

创建一个监听多个表的全局触发器

Oracle非分区索引,全局分区索引和本地分区索引。

在 Oracle 程序中,如何定义局部变量并在 DECLARE 块之后使用它?

SQL Server 表变量和临时表的区别