gpt4 book ai didi

oracle - PLS-00540 : Object not supported in this context while trying to compile package specification

转载 作者:行者123 更新时间:2023-12-02 08:16:49 25 4
gpt4 key购买 nike

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

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;

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

<小时/>

这些区别之一是 record 类型不支持构造函数(隐式或显式)。这意味着您需要单独分配每个字段:

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';

关于oracle - PLS-00540 : Object not supported in this context while trying to compile package specification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33134298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com