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

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

概述我正在尝试编译包规范.我想包含一些类型定义并声明一个函数: 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_ 我正在尝试编译包规范.我想包含一些类型定义并声明一个函数:

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_sub_type ASl_type  col_sub_type := col_sub_type();BEGINFOR i IN (SELECT disTINCT table_name t_name FROM ALL_TAB_ColUMNS WHERE table_name = 'table_1') LOOPl_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_typeIS table OFcol_type;FUNCTION get_col_tab RETURN col_sub_type;

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

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

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

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

SELECT disTINCT table_name t_nameBulK   ColLECT INTO l_typeFROM   all_tab_columnsWHERE  table_name = 'table_1';
总结

以上是内存溢出为你收集整理的oracle – PLS-00540:在尝试编译包规范时,此上下文中不支持该对象全部内容,希望文章能够帮你解决oracle – PLS-00540:在尝试编译包规范时,此上下文中不支持该对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1166523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存