【发布时间】:2014-12-16 17:24:43
【问题描述】:
我有一个关于在 Oracle SQL 函数中使用集合的问题。
包中有类型的定义:
/* Types of package*/
create or replace PACKAGE "test" AS
TYPE type_record_1 IS record ( id_num NUMBER , timestamp_num NUMBER,value NUMBER);
TYPE type_table_1 IS TABLE OF type_record_1;
TYPE type_record_2 IS record ( id_num NUMBER , timestamp_num NUMBER,pValue NUMBER);
TYPE type_table_2 IS TABLE OF type_record_2;
END test;
问题在于函数_2。 function_2 使用 function_1 的输出。 当我尝试在 function_2 中选择时出现错误消息。 错误信息“SQL 语句中不允许本地集合类型”。
你能帮忙吗?在函数中使用集合有什么问题?
/*function 1*/
FUNCTION function_1
RETURN type_table_1
IS
table_1 type_table_1;
BEGIN
-- select values from
SELECT id_num, timestamp_num, value --type_record_1 (id_num, timestamp_num, value)
BULK COLLECT INTO table_1
FROM (
SELECT
l.id_num,
EXTRACT(hour from end_time) * 60 + EXTRACT(minute from end_time) as timestamp_num,
l.value
FROM INTERVAL_F l
WHERE id_num IN (SELECT id_num FROM table_rev)
);
RETURN table_1;
END function_1;
/*function 2*/
FUNCTION function_2
(
table_1 IN type_table_1
)
RETURN type_table_2
IS
table_2 type_table_2;
BEGIN
SELECT type_record_2(id_num , timestamp_num , pValue)
BULK COLLECT INTO table_2 FROM (
SELECT id_num
, timestamp_num
, value as pValue
FROM table(table_1) -- ERROR IS HERE
);
RETURN table_2;
END function_2;
【问题讨论】:
-
因为根本不允许在声明不是在模式级别(12c 之前)的集合上使用
table()运算符。 12c 放宽了这个限制,在包规范中声明一个集合就足够了,以便能够在其他地方“查询”它(使用table()运算符)。
标签: sql oracle select collections plsql