2017-12-22 5 views
0

In meiner PLSQL-Prozedur versuche ich ein Array mit dem Namen FRAUD_IP_ARRAY übergeben. Wenn ich die Prozedur kompiliere, erhalte ich keinen Fehler. Wenn ich jedoch versuche, es zu testen, habe ich den Fehler "ORA-O6531:Reference to uninitialized collection error". Meine Array-Erstellung, Verfahren und Test Codes sind wie folgt.ORA-O6531: Verweis auf nicht initialisierte Sammlung Fehler

1) Array Creation

CREATE OR REPLACE TYPE FRAUD_IP_ARRAY AS VARRAY(50) OF 
VARCHAR2(11); 

2) Verfahren (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 [email protected]_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) Testcode

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; 

Also was ist die Ursache dafür und wie kann ich das für anstehende Probleme lösen? Vielen Dank :)

Antwort

1

Sie müssen das VARRAY initialisieren, bevor Sie es verwenden können. Zum Beispiel wie folgt aus:

DECLARE 
    p_sira_no_arr fraud_ip_array := fraud_ip_array('1', '2'); 
BEGIN 

oder

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; 

Aus Performance-Gründen sollten Sie FORALL Aussage bevorzugen:

FORALL i IN INDICES OF P_SIRA_NO_ARR 
UPDATE [email protected]_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); 
Verwandte Themen