【发布时间】:2018-07-27 13:24:27
【问题描述】:
在下面的代码中,我试图将nestedTable payment_obj 从父过程传递给子过程,但在子过程中无法将数据插入嵌套表中,因为即使在父过程中初始化之后它也会抛出错误-对未初始化集合的引用” *原因:嵌套表或可变数组的元素或成员函数 被引用(需要初始化集合的地方) 没有初始化集合。
我正在将数据收集到需要插入到子过程中的付款表中的嵌套表中,并将数据插入到在父过程中的嵌套表中收集的付款表中。如果嵌套表不可能实现这种类型的要求。
CREATE OR REPLACE
PACKAGE pkg_payment
AS
PROCEDURE PROCESS_PAYMENTS;
END pkg_payment;
CREATE OR REPLACE
PACKAGE body pkg_payment
AS
type typ_payment
IS
record
(
payment_id payment1.payment_id%type,
);
type tab_typ_payment
IS
TABLE OF typ_payment;
PROCEDURE prepare_payments(payment_obj OUT tab_typ_payment )
IS
tab_typ_payment_INDEX NUMBER ( 2 ) := 0 ;
BEGIN
payment_obj.extend;
tab_typ_payment_INDEX:= payment_obj.count;
payment_obj ( tab_typ_payment_INDEX ) .payment_id :=tab_typ_payment_INDEX;
END prepare_payments;
PROCEDURE PROCESS_PAYMENTS
IS
payment_obj tab_typ_payment:= tab_typ_payment();
CURSOR C_PUIDS_CUR
IS
(
select puid from payments
);
type PUIDS
IS
TABLE OF C_PUIDS_CUR%rowtype;
PUIDS_OBJ PUIDS := PUIDS();
BEGIN
OPEN C_PUIDS_CUR;
LOOP
FETCH C_PUIDS_CUR bulk collect INTO PUIDS_OBJ limit 100;
BEGIN
FOR I_ROW_PUID IN 1 .. PUIDS_OBJ .count
LOOP
prepare_payments( payment_obj);
END LOOP; -- FOR LOOP
END; -- END for fetch begin
EXIT
WHEN C_PUIDS_CUR %notfound;
END LOOP; -- End for limit loop
CLOSE C_PUIDS_CUR ;
forall i IN 1 .. payment_obj.count SAVE EXCEPTIONS
INSERT INTO payment1 VALUES payment_obj
(i
);
END PROCESS_PAYMENTS;
END pkg_payment;
【问题讨论】:
标签: sql stored-procedures oracle11g plsqldeveloper