我正在尝试编译包规范.我想包含一些类型定义并声明一个函数:
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;
Run Code Online (Sandbox Code Playgroud)
最后,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;
Run Code Online (Sandbox Code Playgroud)
但是在编译包规范时,我收到以下错误:
PLS-00540:此上下文中不支持该对象
据我所知,我不能OBJECT在包规范中使用类型.是否有解决方法或其他方法来执行此操作?
提前致谢.
在PL/SQL中,您必须使用record而不是object.
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;
Run Code Online (Sandbox Code Playgroud)
虽然存在一些功能差异,但如果您只是想创建一组列定义,它们实际上是相同的.
其中一个差异是record类型不支持构造函数(隐式或显式).这意味着您需要单独分配每个字段:
l_type(l_type.last).col_name := i.t_name;
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用bulk collect:
SELECT DISTINCT table_name t_name
BULK COLLECT INTO l_type
FROM all_tab_columns
WHERE table_name = 'TABLE_1';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |