我在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内部搜索以检索对象。
任何人都可以显示正确的语法吗?
答案 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