2013-06-11 72 views
0

我有內置在包含有一個塔NOMNL這是一個表rtrd_pri一個Oracle 11g數據庫架構RTRD_W檢索從VARRAY的對象具有被定義爲VARRAY(10)KPS_ADM.NUMBER_T的類型(在KPS_ADM模式中定義爲類型的對象)。我試圖運行一個查詢檢索varray中的KPS_ADM.NUMBER_T對象,但我不斷收到我的SQL語法中返回的錯誤。我內置的功能下面貼SQL甲骨文11g數據庫

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%')工作,它返回一個VARRAY裏面坐了一個KPS_ADM.NUMBER_T對象,但我似乎無法得到正確的語法爲內搜索varray來檢索對象。

任何人都可以顯示正確的語法來做到這一點?

回答

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 
+0

非常感謝這些信息。它對我來說非常合適 –