2017-12-22 7 views
0

PLSQLプロシージャで、名前が FRAUD_IP_ARRAYの配列を渡そうとしています。私がプロシージャをコンパイルするとき、私は何の誤りもありません。 しかし、私はそれをテストしようとするとエラー"ORA-O6531:Reference to uninitialized collection error"が得られます。配列の作成、手続き、テスト コードは以下の通りです。ORA-O6531:初期化されていないコレクション・エラーへの参照

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 [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)テストコード

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を初期化する必要があります。このような例:

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); 

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文を好む必要があります
関連する問題