在我的PLSQL过程中,我试图传递一个名为的数组
FRAUD_IP_ARRAY
。当我编译该过程时,我没有得到任何错误。
但是,当我尝试测试它时,我收到了错误"ORA-O6531:Reference to
uninitialized collection error"
。我的数组创建,过程和测试
代码如下。
1)阵列创建
CREATE OR REPLACE TYPE FRAUD_IP_ARRAY AS VARRAY(50) OF
VARCHAR2(11);
2)程序(SPEC& BODY)
PROCEDURE PR_IP_ONAYLA (P_SIRA_NO_ARR IN FRAUD_IP_ARRAY,
P_GUNC_KULLA_KOD IN VARCHAR2);
PROCEDURE PR_IP_ONAYLA (P_SIRA_NO_ARR IN FRAUD_IP_ARRAY,
P_GUNC_KULLA_KOD IN VARCHAR2) IS
BEGIN
FOR i IN P_SIRA_NO_ARR.FIRST .. P_SIRA_NO_ARR.LAST
LOOP
UPDATE WEB_FRAUD_IP_LOG@T_INTERNET_TERS WIP
SET WIP.IP_ONAY_DURUMU='A',
WIP.GUNC_TAR = SYSDATE,
WIP.GUNC_KULLA_KOD = P_GUNC_KULLA_KOD
WHERE WIP.SIRA_NO = P_SIRA_NO_ARR(i);
END LOOP;
END PR_IP_ONAYLA;
3)测试代码
declare
-- Non-scalar parameters require additional processing
p_sira_no_arr fraud_ip_array;
BEGIN
p_sira_no_arr(1):='1';
p_sira_no_arr(2):='2';
-- p_sira_no_arr(1,1):=1;
-- p_sira_no_arr(1,2):=1;
-- Call the procedure
pck_web_fraud_manager.pr_ip_onayla(p_sira_no_arr => p_sira_no_arr,
p_gunc_kulla_kod =>
:p_gunc_kulla_kod);
end;
那么它的原因是什么?如何解决即将出现的问题呢? 非常感谢:)
答案 0 :(得分:1)
您必须先初始化VARRAY才能使用它。例如:
DECLARE
p_sira_no_arr fraud_ip_array := fraud_ip_array('1', '2');
BEGIN
或
DECLARE
p_sira_no_arr fraud_ip_array := fraud_ip_array();
BEGIN
p_sira_no_arr.extend(2);
p_sira_no_arr(1):='1';
p_sira_no_arr(2):='2';
end;
出于性能原因,您应该更喜欢FORALL声明:
FORALL i IN INDICES OF P_SIRA_NO_ARR
UPDATE WEB_FRAUD_IP_LOG@T_INTERNET_TERS WIP
SET WIP.IP_ONAY_DURUMU='A',
WIP.GUNC_TAR = SYSDATE,
WIP.GUNC_KULLA_KOD = P_GUNC_KULLA_KOD
WHERE WIP.SIRA_NO = P_SIRA_NO_ARR(i);