我想在這裏使用遊標光標場,我想知道如何我在選擇列訪問光標場?如何使用選擇查詢
我有如下的實現,
create or replace TYPE "TABLE_TYPE_SAMPLE" AS OBJECT(
ENTITY_NAME VARCHAR2(100)
);
create or replace TYPE "TABLE_SAMPLE" AS TABLE OF TABLE_TYPE_SAMPLE;
CREATE OR REPLACE FUNCTION segmentFields(
txnId VARCHAR2)
RETURN TABLE_SAMPLE
IS
attValue VARCHAR2(20);
curStr VARCHAR2(20);
flexTable TABLE_SAMPLE := TABLE_TYPE_SAMPLE();
CURSOR cur_seg
IS
(SELECT colA
FROM table1 -- (table name has column colA)
WHERE id = txnId
);
BEGIN
FOR cur_recd IN cur_seg
LOOP
curStr := cur_recd.colA;
SELECT curStr into attValue FROM PER_PEOPLE_GROUPS;
flexTable.EXTEND;
flexTable(flexTable.count) := (TABLE_TYPE_SAMPLE(attValue)) ;
END LOOP;
RETURN flexTable;
END;
沒有錯誤遵守的功能。但是當我嘗試下面的查詢運行
select * from table(segmentFields(480));
我得到下面的錯誤,
ORA-01422:精確獲取回報超過行
ORA-06512的請求數:在 「SEGMENTFIELDS」 ,第19行
01422. 00000 - 「精確讀取返回的行數多於請求的行數」
*原因:精確讀取中指定的數字小於返回的行數。
*行動:重寫行的查詢或更改號碼請
我想明白了,什麼是錯的這個實現。
謝謝。
嗨APC, 您的推薦BULK INTO工作。 TYPE segments_aat 是表cur_seg%ROWTYPE; l_columns segments_aat; SELECT curStr BULK COLLECT到l_columns FROM PER_PEOPLE_GROUPS; – SatyajeethT
@SatyajeethT - 如果這個答案對你有用,請將它作爲正確答案加註和/或接受。這些行動提高了SO作爲未來求職者資源的質量。 – APC