2017-12-22 50 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) 시험 CODE

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 문을 선호한다