ORA-O6531: 引用未初始化的集合错误
Posted
技术标签:
【中文标题】ORA-O6531: 引用未初始化的集合错误【英文标题】:ORA-O6531:Reference to uninitialized collection error 【发布时间】:2017-12-22 13:21:46 【问题描述】:在我的 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;
那么它的原因是什么,我该如何解决即将出现的问题? 非常感谢:)
【问题讨论】:
【参考方案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);
【讨论】:
是的,我意识到 VARRAY 也必须在测试部分声明。谢谢你的观点。以上是关于ORA-O6531: 引用未初始化的集合错误的主要内容,如果未能解决你的问题,请参考以下文章