SQL从Oracle 11g数据库中的VARRAY中检索对象

时间:2013-06-11 15:54:15

标签: sql plsql oracle11g

我在Oracle 11g数据库中构建了一个模式RTRD_W,该数据库包含一个表rtrd_pri,该表具有一个NOMNL列,其类型定义为 VARRAY(10)OF KPS_ADM.NUMBER_T (一个对象定义)作为KPS_ADM模式中的类型)。我正在尝试运行查询到检索varray中的KPS_ADM.NUMBER_T对象,但我一直在我的SQL语法中返回一个错误。我构建的功能发布在

下面
CREATE or replace function RETRIEVEPRIREF RETURN KPS_ADM.NUMBER_T AS
REF1 KPS_ADM.NUMBER_T;
BEGIN
SELECT KPS_ADM.NUMBER_T INTO REF1 from table(NOMNL) WHERE (SELECT NOMNL FROM RTRD_W.rtrd_pri WHERE (syst_id like '%0516%'));
RETURN REF1;
END RETRIEVEPRIREF;

我知道查询:SELECT NOMNL FROM RTRD_W.rtrd_pri WHERE (syst_id like '%0516%')有效并确实返回一个带有单个KPS_ADM.NUMBER_T对象的varray,但我似乎无法正确地在varray内部搜索以检索对象。

任何人都可以显示正确的语法吗?

1 个答案:

答案 0 :(得分:1)

-- an object defined as a type in the KPS_ADM schema
CREATE TYPE number_t        AS OBJECT (object_value NUMBER);
CREATE TYPE varray_number_t AS VARRAY(10) OF number_t;

CREATE TABLE rtrd_pri
(
    column_one NUMBER
,   column_two varray_number_t
);

INSERT INTO rtrd_pri VALUES(1, (varray_number_t(number_t(11), number_t(22))));
INSERT INTO rtrd_pri VALUES(2, (varray_number_t(number_t(33), number_t(44))));

SELECT  column_one, OBJECT_VALUE AS column_two
FROM    rtrd_pri, TABLE(rtrd_pri.column_two)
;

COLUMN_ONE  COLUMN_TWO
1           11
1           22
2           33
2           44