加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长百科 > 正文

oracle – PLS-00540:在尝试编译包规范时,此上下文中不支持该对

发布时间:2021-03-15 10:23:47 所属栏目:站长百科 来源:网络整理
导读:我正在尝试编译包规范.我想包含一些类型定义并声明一个函数: TYPE col_type AS OBJECT (col_name VARCHAR2(50));TYPE col_sub_typeIS TABLE OFcol_type;FUNCTION get_col_tab RETURN col_sub_type; 最后,get_col_tab函数: FUNCTION get_col_tab RETURN col

我正在尝试编译包规范.我想包含一些类型定义并声明一个函数:

TYPE col_type AS OBJECT (
col_name VARCHAR2(50)
);

TYPE col_sub_type
IS TABLE OF
col_type;

FUNCTION get_col_tab RETURN col_sub_type;

最后,get_col_tab函数:

FUNCTION get_col_tab RETURN col_sub_type AS
l_type  col_sub_type := col_sub_type();
BEGIN
FOR i IN (SELECT DISTINCT TABLE_NAME t_name FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'TABLE_1') LOOP
l_type.extend;
l_type(l_type.last) := col_type(i.t_name);
END LOOP;
RETURN l_type;
END;

但是在编译包规范时,我收到以下错误:

PLS-00540: Object not supported in this context

据我所知,我不能在包规范中使用类型OBJECT.是否有解决方法或其他方法来执行此操作?

提前致谢.

解决方法

在PL / SQL中,您必须使用记录而不是对象.

TYPE col_type IS RECORD (
col_name VARCHAR2(50)
);

TYPE col_sub_type
IS TABLE OF
col_type;

FUNCTION get_col_tab RETURN col_sub_type;

虽然存在一些功能差异,但如果您只是想创建一组列定义,它们实际上是相同的.

其中一个区别是记录类型不支持构造函数(隐式或显式).这意味着您需要单独分配每个字段:

l_type(l_type.last).col_name := i.t_name;

另一种方法是使用批量收集:

SELECT DISTINCT table_name t_name
BULK   COLLECT INTO l_type
FROM   all_tab_columns
WHERE  table_name = 'TABLE_1';

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读