Error report: ORA-06531: Reference to uninitialized collection

I have Procedure like this
declare
CURSOR lcu_emp
  IS
    (SELECT *
    FROM
  emp);
ln_count PLS_INTEGER := 1;
  TYPE emp_TBL_TYPE
IS
  TABLE OF LCU_emp%ROWTYPE;
  LT_emp emp_TBL_TYPE;
begin
FOR Lr_EMP IN LCU_EMP
  LOOP
    ln_count             :=1;
Lr_EMP.EMP_NO:='1234';  -- updating the loop variable ... just for eg its 1234
--Transferring the loop variable to collection
lt_PREV_ASSIGN(ln_count):= Lr_PREV_ASSIGN;   -- THis line its errorring it as Error report: ORA-06531: Reference to uninitialized collection
  END LOOP;
FOR lr_emp IN lt_emp.FIRST..lt_emp.LAST
  LOOP
-- printing records when  LT_emp (lr_emp ).emp_no = 1234;
END LOOP;
end;Please help how to assign cursor record to collection...
Thanks
Vinoth.

The realtime procedure is below... i thought it will be easy for u guys to understand
PROCEDURE MAIN(
    P_ERRBUFF OUT VARCHAR2,
    P_RETCODE OUT NUMBER,
    P_BUSINESS_GROUP_ID IN NUMBER,
    P_EFFECTIVE_DATE    IN VARCHAR2,
    p_debug_flag        IN VARCHAR2 )
AS
  LN_ELEMENT_LINK_ID pay_element_links_f.element_link_id%TYPE;
  LN_INPUT_VALUE_ID1 pay_input_values_f.input_value_id%TYPE;
  LN_INPUT_VALUE_ID2 pay_input_values_f.input_value_id%TYPE;
  ld_effective_start_date pay_element_entries_f.effective_start_date%TYPE;
  LD_EFFECTIVE_END_DATE PAY_ELEMENT_ENTRIES_F.EFFECTIVE_END_DATE%TYPE;
  LN_ELEMENT_ENTRY_ID PAY_ELEMENT_ENTRIES_F.ELEMENT_ENTRY_ID%TYPE;
  ln_object_version_number pay_element_entries_f.object_version_number%TYPE;
  lc_create_warning BOOLEAN;
  CURSOR lcu_prev_assign
  IS
    (SELECT *
    FROM
      (SELECT P_PAAF.ASSIGNMENT_ID PREV_ASSIGNMENT_ID,
        C_PAAF.ASSIGNMENT_ID CURR_ASSIGNMENT_ID,
        PAP.ACCRUAL_PLAN_NAME ACCRUAL_PLAN_NAME,
        APPS.PER_UTILITY_FUNCTIONS.GET_NET_ACCRUAL ( P_PAAF.ASSIGNMENT_ID, P_PAAF.PAYROLL_ID , P_PAAF.BUSINESS_GROUP_ID, -1 , TRUNC(XPPOS.PREV_ACTUAL_TERMINATION_DATE) , PAP.ACCRUAL_PLAN_ID) NET_ACCRUAL,
        XPPOS.PERIOD_OF_SERVICE_ID,
        XPPOS.PERSON_ID,
        XPPOS.CURRENT_DATE_START ,
        XPPOS.PREVIOUS_DATE_START,
        XPPOS.CURR_ACTUAL_TERMINATION_DATE,
        XPPOS.PREV_ACTUAL_TERMINATION_DATE ,
        XPPOS.PREV_LSP_DATE PREV_LSP_DATE,
        P_PAAF.BUSINESS_GROUP_ID PREV_BG_ID ,
        c_paaf.business_group_id curr_bg_id ,
        'N' NEW_ASSIGNMENT_ELEIGIBLE ,
        NULL PTO_ELIGBLE_DATE,
        NULL status,
        NULL ERROR_MESSAGE,
        NULL PREV_ASS_ELEMENT_ENTRY_ID,
        null curr_ass_element_entry_id
      FROM
        (SELECT PERIOD_OF_SERVICE_ID,
          PERSON_ID,
          DATE_START CURRENT_DATE_START,
          LEAD(DATE_START,1,NULL) OVER(PARTITION BY PERSON_ID ORDER BY DMY_ORDER) PREVIOUS_DATE_START,
          ACTUAL_TERMINATION_DATE CURR_ACTUAL_TERMINATION_DATE,
          LEAD(ACTUAL_TERMINATION_DATE,1,NULL) OVER(PARTITION BY PERSON_ID ORDER BY DMY_ORDER) PREV_ACTUAL_TERMINATION_DATE,
          lead(last_standard_process_date ,1,NULL) over(PARTITION BY person_id ORDER BY DMY_ORDER) prev_lsp_date,
          row_number() over (PARTITION BY person_id ORDER BY date_start DESC) DMY_SLCT
        FROM
          (SELECT period_of_service_id ,
            PERSON_ID ,
            DATE_START,
            ACTUAL_TERMINATION_DATE,
            last_standard_process_date,
            COUNT(PERSON_ID) OVER (PARTITION BY PERSON_ID) "CNT",
            row_number() over (PARTITION BY person_id ORDER BY date_start DESC) "DMY_ORDER"
          FROM PER_PERIODS_OF_SERVICE PPOS
      WHERE CNT     >=2
      AND DMY_ORDER IN (1,2)
        ) XPPOS,
        PER_ALL_ASSIGNMENTS_F C_PAAF ,
        PER_ALL_ASSIGNMENTS_F P_PAAF,
        PAY_ELEMENT_ENTRIES_F P_PEEF,
        PAY_ACCRUAL_PLANS PAP,
        PER_PERSON_TYPE_USAGES_F P_PPTUF,
        PER_PERSON_TYPES P_PPT
      WHERE XPPOS.DMY_SLCT =1
      AND C_PAAF.PERSON_ID = XPPOS.PERSON_ID
      AND TRUNC(CURRENT_DATE_START) BETWEEN C_PAAF.EFFECTIVE_START_DATE AND C_PAAF.EFFECTIVE_END_DATE
      AND C_PAAF.PRIMARY_FLAG = 'Y'
      AND P_PAAF.PERSON_ID    = XPPOS.PERSON_ID
      AND TRUNC(prev_actual_termination_date) BETWEEN P_PAAF.EFFECTIVE_START_DATE AND P_PAAF.EFFECTIVE_END_DATE
      AND P_PAAF.PRIMARY_FLAG  = 'Y'
      AND P_PEEF.ASSIGNMENT_ID = P_PAAF.ASSIGNMENT_ID
      AND TRUNC(PREV_ACTUAL_TERMINATION_DATE) BETWEEN P_PEEF.EFFECTIVE_START_DATE AND P_PEEF.EFFECTIVE_END_DATE
      AND PAP.ACCRUAL_PLAN_ELEMENT_TYPE_ID = P_PEEF.ELEMENT_TYPE_ID
      AND C_PAAF.BUSINESS_GROUP_ID         = P_BUSINESS_GROUP_ID
      AND TRUNC(PREV_ACTUAL_TERMINATION_DATE) BETWEEN P_PPTUF.EFFECTIVE_START_DATE AND P_PPTUF.EFFECTIVE_END_DATE
      AND P_PPTUF.PERSON_ID                                                                                                                                                                       = P_PAAF.PERSON_ID
      AND P_PPTUF.PERSON_TYPE_ID                                                                                                                                                                  = P_PPT.PERSON_TYPE_ID
      AND P_PPT.SYSTEM_PERSON_TYPE                                                                                                                                                               IN ('EMP', 'EMP_APL')
      AND P_PAAF.EMPLOYMENT_CATEGORY                                                                                                                                                             IN ('LOCAL' , 'FR')
      AND C_PAAF.ASSIGNMENT_ID                                                                                                                                                                    = 83528
      AND APPS.PER_UTILITY_FUNCTIONS.GET_NET_ACCRUAL ( P_PAAF.ASSIGNMENT_ID, P_PAAF.PAYROLL_ID , P_PAAF.BUSINESS_GROUP_ID, -1 , TRUNC(XPPOS.PREV_ACTUAL_TERMINATION_DATE) , PAP.ACCRUAL_PLAN_ID) <> 0
      ORDER BY NEW_ASSIGNMENT_ELEIGIBLE
    CURSOR LCU_PTO_ELGIBLE(P_ASSIGNMENT_ID NUMBER , P_PLAN_NAME VARCHAR2 , P_EFF_DATE DATE)
    IS
      (SELECT MIN(peef.EFFECTIVE_START_DATE) pto_eligble_date
      FROM PAY_ELEMENT_ENTRIES_F PEEF,
        PAY_ELEMENT_TYPES_F PETF
      WHERE PEEF.ASSIGNMENT_ID = P_ASSIGNMENT_ID
      AND PETF.element_NAME    = P_PLAN_NAME
      AND TRUNC(p_eff_date) BETWEEN petf.effective_start_date AND petf.effective_end_date
    CURSOR LCU_ELEMENT_LINK(p_plan_name VARCHAR2,p_eff_date DATE)
    IS
      (SELECT PIVF1.INPUT_VALUE_ID INPUT_VALUE_ID1,
        PIVF2.INPUT_VALUE_ID INPUT_VALUE_ID2,
        PELF.ELEMENT_LINK_ID
      FROM PAY_ELEMENT_LINKS_F PELF ,
        PAY_ELEMENT_TYPES_F PETF,
        pay_input_values_f pivf1 ,
        pay_input_values_f pivf2
      WHERE PELF.ELEMENT_TYPE_ID = PETF.ELEMENT_TYPE_ID
      AND PIVF1.ELEMENT_TYPE_ID  = PETF.ELEMENT_TYPE_ID
      AND PIVF2.ELEMENT_TYPE_ID  = PETF.ELEMENT_TYPE_ID
      AND TRUNC(P_EFF_DATE) BETWEEN PELF.EFFECTIVE_START_DATE AND PELF.EFFECTIVE_END_DATE
      AND TRUNC(P_EFF_DATE) BETWEEN PETF.EFFECTIVE_START_DATE AND PETF.EFFECTIVE_END_DATE
      AND TRUNC(P_EFF_DATE) BETWEEN PIVF1.EFFECTIVE_START_DATE AND PIVF1.EFFECTIVE_END_DATE
      AND TRUNC(p_eff_date) BETWEEN pivf2.effective_start_date AND pivf2.effective_end_date
      AND ELEMENT_NAME = p_plan_name
        ||' RollOver Adj'
      AND PIVF2.NAME             = 'Hours'
      AND PIVF1.NAME             = 'Effective Date'
      AND petf.BUSINESS_GROUP_ID = P_BUSINESS_GROUP_ID
    ln_count PLS_INTEGER := 1;
  TYPE PREV_ASSIGN_TBL_TYPE
IS
  TABLE OF LCU_PREV_ASSIGN%ROWTYPE;
  LT_PREV_ASSIGN PREV_ASSIGN_TBL_TYPE;
  --LR_PREV_ASSIGN LCU_PREV_ASSIGN%ROWTYPE;
  --Lb_PREV_ASSIGN LCU_PREV_ASSIGN%ROWTYPE;
BEGIN
  FOR Lr_PREV_ASSIGN IN LCU_PREV_ASSIGN
  LOOP
    ln_count             :=1;
    LN_ELEMENT_LINK_ID   := NULL;
    LN_INPUT_VALUE_ID1   := NULL;
    LN_INPUT_VALUE_ID2   := NULL;
    FOR LRU_ELEMENT_LINK IN LCU_ELEMENT_LINK (Lr_PREV_ASSIGN.ACCRUAL_PLAN_NAME,LR_PREV_ASSIGN.PREV_LSP_DATE )
    LOOP
      LN_ELEMENT_LINK_ID :=LRU_ELEMENT_LINK.ELEMENT_LINK_ID;
      LN_INPUT_VALUE_ID1 := LRU_ELEMENT_LINK.input_value_id1;
      LN_INPUT_VALUE_ID2 := LRU_ELEMENT_LINK.INPUT_VALUE_ID2;
      BEGIN
        apps.pay_element_entry_api.create_element_entry ( P_EFFECTIVE_DATE => LR_PREV_ASSIGN.PREV_LSP_DATE, P_BUSINESS_GROUP_ID => LR_PREV_ASSIGN.PREV_BG_ID ,p_assignment_id => Lr_PREV_ASSIGN.prev_assignment_id ,p_element_link_id => ln_element_link_id ,p_entry_type => 'E'
        --,p_creator_type => 'F'
        --,p_cost_allocation_keyflex_id => cost_keyflex_id
        --,p_date_earned => l_week_ending_date
        ,p_input_value_id1 => LN_INPUT_VALUE_ID1 ,p_input_value_id2 => LN_INPUT_VALUE_ID2
        --,p_input_value_id3 => l_inp_value3_id
        --,p_input_value_id4 => l_inp_value4_id
        ,P_ENTRY_VALUE1 => LR_PREV_ASSIGN.PREV_ACTUAL_TERMINATION_DATE ,p_entry_value2 => (-1)* LR_PREV_ASSIGN.net_accrual
        --,p_entry_value3 => l_constant_all_deductions
        --,p_entry_value4 => l_constant_no
        ,p_effective_start_date => ld_effective_start_date ,p_effective_end_date => ld_effective_end_date ,p_element_entry_id => ln_element_entry_id ,p_object_version_number => ln_object_version_number ,P_CREATE_WARNING => LC_CREATE_WARNING );
        LR_PREV_ASSIGN.STATUS                    :='P';
        Lr_PREV_ASSIGN.prev_ass_element_entry_id := ln_element_entry_id;
      EXCEPTION
      WHEN OTHERS THEN
        LR_PREV_ASSIGN.STATUS        :='E';
        Lr_PREV_ASSIGN.error_message := SQLERRM;
      END;
    END LOOP;
    FOR LR_PTO_ELGIBLE IN LCU_PTO_ELGIBLE(LR_PREV_ASSIGN.CURR_ASSIGNMENT_ID ,LR_PREV_ASSIGN.ACCRUAL_PLAN_NAME , LR_PREV_ASSIGN.CURRENT_DATE_START )
    LOOP
      LR_PREV_ASSIGN.NEW_ASSIGNMENT_ELEIGIBLE := 'Y';
      LR_PREV_ASSIGN.pto_eligble_date         := LR_PTO_ELGIBLE.pto_eligble_date ;
    END LOOP;
    IF(LR_PREV_ASSIGN.STATUS = 'P')
    then
    BEGIN
        apps.pay_element_entry_api.create_element_entry (
        P_EFFECTIVE_DATE => LR_PREV_ASSIGN.pto_eligble_date ,
        P_BUSINESS_GROUP_ID => LR_PREV_ASSIGN.CURR_BG_ID ,
        P_ASSIGNMENT_ID => LR_PREV_ASSIGN.CURR_ASSIGNMENT_ID ,
        P_ELEMENT_LINK_ID => LN_ELEMENT_LINK_ID ,
        p_entry_type => 'E'
        --,p_creator_type => 'F'
        --,p_cost_allocation_keyflex_id => cost_keyflex_id
        --,p_date_earned => l_week_ending_date
        ,P_INPUT_VALUE_ID1 => LN_INPUT_VALUE_ID1
        ,p_input_value_id2 => LN_INPUT_VALUE_ID2
        --,p_input_value_id3 => l_inp_value3_id
        --,p_input_value_id4 => l_inp_value4_id
        ,P_ENTRY_VALUE1 => LR_PREV_ASSIGN.PTO_ELIGBLE_DATE ,
        p_entry_value2 =>  LR_PREV_ASSIGN.net_accrual
        --,p_entry_value3 => l_constant_all_deductions
        --,p_entry_value4 => l_constant_no
        ,P_EFFECTIVE_START_DATE => LD_EFFECTIVE_START_DATE ,
        P_EFFECTIVE_END_DATE => LD_EFFECTIVE_END_DATE ,
        P_ELEMENT_ENTRY_ID => LN_ELEMENT_ENTRY_ID ,
        P_OBJECT_VERSION_NUMBER => LN_OBJECT_VERSION_NUMBER ,
        P_CREATE_WARNING => LC_CREATE_WARNING );
        LR_PREV_ASSIGN.STATUS                    :='S';
        LR_PREV_ASSIGN.CURR_ASS_ELEMENT_ENTRY_ID := LN_ELEMENT_ENTRY_ID;
        commit;
      EXCEPTION
      WHEN OTHERS THEN
      rollback;
        LR_PREV_ASSIGN.STATUS        :='E';
        LR_PREV_ASSIGN.ERROR_MESSAGE := SQLERRM;
      END;
      END IF;
    lt_PREV_ASSIGN(ln_count):= Lr_PREV_ASSIGN;
ln_count:=ln_count+1;
  END LOOP;
  FOR lr_prev_assign IN lt_prev_assign.FIRST..lt_prev_assign.LAST
  LOOP
  IF(lt_prev_assign(lr_prev_assign).status = 'E')
  THEN
  FND_FILE.PUT_LINE(FND_FILE.LOG,lt_prev_assign(lr_prev_assign).error_message);
  end if;
    --print the error records here
  END LOOP;
END MAIN;

Similar Messages

  • ORA-06531 reference to uninitialized collection in oracle 6i form

    Hello,
    I am importing data from excel to database table with column mapping (oracle 6i forms)using ole2 package, then calling package
    which is having a procedure. while executing the package procedure,
    I am getting error 'ora-06531 reference to uninitialized collection' i.e. before for i in 1..in_lData.count
    I am working on it but still not getting any solution. There is no problem in coding my form gets compiled but at run time i am getting this error.
    And while debugging, data fetched from ole2 package is not passed to for loop of the procedure.
    (first of all i am calling ole 2 package, then from ole2 package i am calling my package. procedure)
    please help me. My code is this
    ------------------------------------------------------Ole 2 Package begins-----------------------------------------------------------------
    PROCEDURE get_excel IS
    APPLICATION OLE2.OBJ_TYPE;
         WORKBOOKS OLE2.OBJ_TYPE;
         WORKBOOK OLE2.OBJ_TYPE;
         WORKSHEETS OLE2.OBJ_TYPE;
         WORKSHEET OLE2.OBJ_TYPE;
         CELL OLE2.OBJ_TYPE;
         CTR NUMBER(12);
         COLS NUMBER(2);
         CELLVALUE VARCHAR2(89);
         C_ROUTE VARCHAR2(255);
         V_ROUTE VARCHAR2(1000);
         C_TRNDATE VARCHAR2(255);
         V_TRNDATE VARCHAR2(1000);
         C_TTIME     VARCHAR2(255);
         V_TTIME VARCHAR2(1000);
         C_TID VARCHAR2(255);
         V_TID VARCHAR2(1000);
         FILENAME VARCHAR2(500);
         v_path                     varchar2(1000):=:path;
         ARGS OLE2.OBJ_TYPE;
         tDataList     PK_EXCEL_TO_DB.tDataList;
    BEGIN
                   :progress:='Please wait...';
                   SYNCHRONIZE;
                   --------------INITIATE EXCEL APPLICATION---------------------------
                   filename := V_PATH;--GET_FILE_NAME('c:\', File_Filter=>'Excel Files (*.xls)|*.xls|'); -- to pick the file
                   APPLICATION := OLE2.CREATE_OBJ('EXCEL.APPLICATION');
                   OLE2.SET_PROPERTY(APPLICATION,'VISIBLE','FALSE');
                   ----------------GET WORKBOOKS FROM EXCEL APPLICATION---------------
                   WORKBOOKS := OLE2.GET_OBJ_PROPERTY(APPLICATION, 'WORKBOOKS');
                   ----------------OPEN REQUIRED WORKBOOK-----------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS, FILENAME);
                   WORKBOOK := OLE2.GET_OBJ_PROPERTY(WORKBOOKS,'OPEN',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ----------------OPEN REQUIRED WORKSHEET---------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,'Sheet1');
                   WORKSHEET := OLE2.GET_OBJ_PROPERTY (WORKBOOK,'WORKSHEETS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ----------------GET CELL VALUE-------------------------------------
                   ctr := 2; --row number
                   cols := 1; -- column number
                   FIRST_RECORD;
                   LOOP
                   -----------------------COLUMN1-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS); --COLS
                   OLE2.ADD_ARG(ARGS,1);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_ROUTE := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
              ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,1);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_ROUTE := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   -----------------------COLUMN2-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS);
                   OLE2.ADD_ARG(ARGS,2);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_TRNDATE:= OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,2);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_TRNDATE:= OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   -----------------------COLUMN3-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS);
                   OLE2.ADD_ARG(ARGS,3);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_TTIME := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,3);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_TTIME := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   -----------------------COLUMN4-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS);
                   OLE2.ADD_ARG(ARGS,4);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_TID := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,4);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_TID := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
    PK_EXCEL_TO_DB.PR_DO_INSERT(tDataList);                          
    EXIT WHEN length(V_Route) = 0 or length(V_Route) is null;
    ctr := ctr + 1;
              cols := 1;
    i_ldata := PK_EXCEL_TO_DB.tDatalist(); --already define                    
    PK_EXCEL_TO_DB.PR_DO_INSERT(tDataList);
    END LOOP;
    :progress:='EXCEL READING IS DONE...';
    ----------------CLOSE THE EXCEL SHEET AFTER READING--------------
    OLE2.INVOKE(APPLICATION,'QUIT');
    -----------------RELEASE ALL OBJECTS
    OLE2.RELEASE_OBJ(CELL);
    OLE2.RELEASE_OBJ(WORKSHEET);
    OLE2.RELEASE_OBJ(WORKBOOK);
    OLE2.RELEASE_OBJ(WORKBOOKS);
    OLE2.RELEASE_OBJ(APPLICATION);
    :PROGRESS := 'DATA INSERTED INTO THE TABLE '; SYNCHRONIZE;
    SYNCHRONIZE;
    exception
    WHEN OTHERS THEN
    MESSAGE(sqlerrm);
    END;
    ----------------------------------------------------------------------------------------OLE2 PACKAGE ENDS-------------------------------------------------
    ------------------------------------------------------------PK_EXCEL_TO_DB PACKAGE SPECIFICATION---------------------------------------------
    PACKAGE PK_EXCEL_TO_DB IS
    TYPE tKeyValue IS RECORD (
    CROUTE VARCHAR2(255),
    VROUTE VARCHAR2(1000),
    CTRNDATE VARCHAR2(255),
    VTRNDATE VARCHAR2(1000),
    CTTIME     VARCHAR2(255),
    VTTIME VARCHAR2(1000),
    CTID VARCHAR2(255),
    VTID VARCHAR2(1000));
    TYPE tDataList IS TABLE OF tKeyValue;
    PROCEDURE PR_DO_INSERT(i_lData IN tDataList);     
    END;
    -----------------------------------------------------------------PK_EXCEL_TO_DB PACKAGE BODY-----------------------------------------------------
    PACKAGE BODY PK_EXCEL_TO_DB IS
    PROCEDURE PR_DO_INSERT(i_lData IN tDataList) IS
    CC_ROUTE VARCHAR2(255);
    VV_ROUTE VARCHAR2(1000);
    CC_TRNDATE VARCHAR2(255);
    VV_TRNDATE VARCHAR2(1000);
    CC_TTIME     VARCHAR2(255);
    VV_TTIME VARCHAR2(1000);
    CC_TID VARCHAR2(255);
    VV_TID VARCHAR2(1000);
    BEGIN
    FOR i IN 1..i_lData.count
    LOOP
    CC_ROUTE:=CC_ROUTE || ',' || i_ldata(i).CROUTE;
    VV_ROUTE:=VV_ROUTE|| ',''' || i_ldata(i).VROUTE || '''';
    CC_TRNDATE :=CC_TRNDATE || ',' || i_ldata(i).CTRNDATE ;
    VV_TRNDATE :=VV_TRNDATE || ',''' || i_ldata(i).VTRNDATE || '''';
    CC_TTIME :=CC_TTIME || ',' || i_ldata(i).CTTIME ;
    VV_TTIME :=VV_TTIME || ',''' || i_ldata(i).VTTIME || '''';
    CC_TID :=CC_TID || ',' || i_ldata(i).CTID ;
    VV_TID :=VV_TID || ',''' || i_ldata(i).VTID|| '''';
    END LOOP;
    --EXECUTE IMMEDIATE
    FORMS_DDL('INSERT INTO TEMP2 (' || SUBSTR(CC_ROUTE, 2) || ' ' ||
                                                      SUBSTR(CC_TRNDATE, 2) || ' ' ||
                                                      SUBSTR(CC_TTIME, 2) || '' ||
                                                      SUBSTR(CC_TID, 2) || ')
    VALUES (' || SUBSTR(VV_ROUTE,2) || ' ' ||
                                       SUBSTR(VV_TRNDATE,2) || '' ||
                                       SUBSTR(VV_TTIME,2) || ' ' ||
                                       SUBSTR(VV_TID,2)|| ')');
    commit;
    END;
    END;
    ------------------------------------------------------------------------PK_EXCEL_TO_DB PACKAGE BODY ENDS--------------------------------------
    Thank You
    Sameer.

    Hii Andreas Weiden,
    Sorry for replying late. I am very thankful to Francois and your for your suggestion. I've gone through the documentation of collection and finally i got the solution.
    But I am unable to insert rercord to the table. Values are passed to the procedure, i am able to see the values while debugging and i get the message
    'DATA INSERTED INTO THE TABLE' but when i check it with sql, the table is empty. I've tried commit and standard.commit, but it doesn't works. My modified code is given below.
    PROCEDURE get_excel IS
    APPLICATION OLE2.OBJ_TYPE;
         WORKBOOKS OLE2.OBJ_TYPE;
         WORKBOOK OLE2.OBJ_TYPE;
         WORKSHEETS OLE2.OBJ_TYPE;
         WORKSHEET OLE2.OBJ_TYPE;
         CELL OLE2.OBJ_TYPE;
         CTR NUMBER(12);
         COLS NUMBER(2);
         CELLVALUE VARCHAR2(89);
         C_ROUTE   VARCHAR2(255);
         V_ROUTE   VARCHAR2(1000);
         C_TRNDATE VARCHAR2(255);
         V_TRNDATE VARCHAR2(1000);
         C_TTIME       VARCHAR2(255);
         V_TTIME   VARCHAR2(1000);
         C_TID     VARCHAR2(255);
         V_TID     VARCHAR2(1000);
         FILENAME   VARCHAR2(500);
         v_path                        varchar2(1000):=:path;
         ARGS OLE2.OBJ_TYPE;
         i_ldata PK_EXCEL_TO_DB.tDataList:=PK_EXCEL_TO_DB.tDataList();
         tDataList     PK_EXCEL_TO_DB.tDataList;
    BEGIN
                   :progress:='Please wait...';
                   SYNCHRONIZE;
                   --------------INITIATE EXCEL APPLICATION---------------------------
                   filename := V_PATH;--GET_FILE_NAME('c:\', File_Filter=>'Excel Files (*.xls)|*.xls|'); -- to pick the file
                   APPLICATION := OLE2.CREATE_OBJ('EXCEL.APPLICATION');
                   OLE2.SET_PROPERTY(APPLICATION,'VISIBLE','FALSE');
                   ----------------GET WORKBOOKS FROM EXCEL APPLICATION---------------
                   WORKBOOKS := OLE2.GET_OBJ_PROPERTY(APPLICATION, 'WORKBOOKS');
                   ----------------OPEN REQUIRED WORKBOOK-----------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS, FILENAME);
                   WORKBOOK := OLE2.GET_OBJ_PROPERTY(WORKBOOKS,'OPEN',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ----------------OPEN REQUIRED WORKSHEET---------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,'Sheet1');
                   WORKSHEET := OLE2.GET_OBJ_PROPERTY (WORKBOOK,'WORKSHEETS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ----------------GET CELL VALUE-------------------------------------
                   ctr := 2; --row number
                   cols := 1; -- column number               
                        FIRST_RECORD;
                   LOOP
                        i_ldata.extend(ctr);
                        i_ldata.extend(cols);
                        --tDataList:=PK_EXCEL_TO_DB.tDataList();
                   -----------------------COLUMN1-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS); --COLS
                   OLE2.ADD_ARG(ARGS,1);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_ROUTE := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(cols).CROUTE:=C_ROUTE;           
                ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,1);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_ROUTE := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(ctr).VROUTE:=V_ROUTE;
                   -----------------------COLUMN2-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS);
                   OLE2.ADD_ARG(ARGS,2);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_TRNDATE:= OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(cols).CTRNDATE:=C_TRNDATE;
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,2);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_TRNDATE:= OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(ctr).vtrndate:=v_trndate;
                   -----------------------COLUMN3-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS);
                   OLE2.ADD_ARG(ARGS,3);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_TTIME := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(cols).CTTIME:=C_TTIME;
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,3);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_TTIME := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(ctr).vttime:=v_ttime;
                   -----------------------COLUMN4-------------------------------------
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,COLS);
                   OLE2.ADD_ARG(ARGS,4);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   C_TID := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(cols).CTID:=C_TID;
                   ARGS := OLE2.CREATE_ARGLIST;
                   OLE2.ADD_ARG(ARGS,CTR);
                   OLE2.ADD_ARG(ARGS,4);
                   CELL := OLE2.GET_OBJ_PROPERTY(WORKSHEET,'CELLS',ARGS);
                   OLE2.DESTROY_ARGLIST(ARGS);
                   ARGS := OLE2.CREATE_ARGLIST;
                   V_TID := OLE2.GET_CHAR_PROPERTY(CELL,'TEXT');
                   i_ldata(ctr).vtid:=v_tid;
         PK_EXCEL_TO_DB.PR_DO_INSERT(i_ldata);               
    --     i_ldata := PK_EXCEL_TO_DB.tDatalist();
    EXIT WHEN length(V_Route) = 0 or length(V_Route) is null;
    ctr := ctr + 1;
    cols := 1;
    END LOOP;
    :progress:='EXCEL READING IS DONE...';
    ----------------CLOSE THE EXCEL SHEET AFTER READING--------------
    OLE2.INVOKE(APPLICATION,'QUIT');
    -----------------RELEASE ALL OBJECTS
    OLE2.RELEASE_OBJ(CELL);
    OLE2.RELEASE_OBJ(WORKSHEET);
    OLE2.RELEASE_OBJ(WORKBOOK);
    OLE2.RELEASE_OBJ(WORKBOOKS);
    OLE2.RELEASE_OBJ(APPLICATION);
    :PROGRESS := 'DATA INSERTED INTO THE TABLE '; SYNCHRONIZE;
    SYNCHRONIZE;
    exception 
    WHEN OTHERS THEN
    MESSAGE(sqlerrm);
    END;Package specification and package body is
    PACKAGE PK_EXCEL_TO_DB IS
                 TYPE tKeyValue IS RECORD (
                             CROUTE VARCHAR2(255),
                             VROUTE VARCHAR2(1000),
                             CTRNDATE VARCHAR2(255),
                             VTRNDATE VARCHAR2(1000),
                             CTTIME      VARCHAR2(255),
                             VTTIME VARCHAR2(1000),
                             CTID VARCHAR2(255),
                             VTID VARCHAR2(1000));
           TYPE tDataList IS TABLE OF tKeyValue;
           PROCEDURE PR_DO_INSERT(i_lData IN tDataList);     
    END;
    -----------------------------------------------------------------PK_EXCEL_TO_DB PACKAGE BODY-----------------------------------------------------
    PACKAGE BODY PK_EXCEL_TO_DB IS
              PROCEDURE PR_DO_INSERT(i_lData IN tDataList) IS
              CC_ROUTE VARCHAR2(255);
              VV_ROUTE VARCHAR2(1000);
              CC_TRNDATE VARCHAR2(255);
              VV_TRNDATE VARCHAR2(1000);
              CC_TTIME      VARCHAR2(255);
              VV_TTIME VARCHAR2(1000);
              CC_TID VARCHAR2(255);
              VV_TID VARCHAR2(1000);
    BEGIN
            FOR i IN 1..i_lData.count
           LOOP
                        CC_ROUTE:=CC_ROUTE || ',' || i_ldata(i).CROUTE;
                        VV_ROUTE:=VV_ROUTE|| ',''' || i_ldata(i).VROUTE || '''';
                        CC_TRNDATE :=CC_TRNDATE || ',' || i_ldata(i).CTRNDATE ;
                        VV_TRNDATE :=VV_TRNDATE || ',''' || i_ldata(i).VTRNDATE || '''';
                        CC_TTIME :=CC_TTIME || ',' || i_ldata(i).CTTIME ;
                        VV_TTIME :=VV_TTIME || ',''' || i_ldata(i).VTTIME || '''';
                        CC_TID :=CC_TID || ',' || i_ldata(i).CTID ;
                        VV_TID :=VV_TID || ',''' || i_ldata(i).VTID|| '''';
             END LOOP;
              FORMS_DDL('INSERT INTO TEMP2 (' || SUBSTR(CC_ROUTE, 2) || ' ' ||
                                 SUBSTR(CC_TRNDATE, 2) || ' ' ||
                                 SUBSTR(CC_TTIME, 2) || '' ||
                                 SUBSTR(CC_TID, 2) || ')
                    VALUES (' || SUBSTR(VV_ROUTE,2) || ' ' ||
                                    SUBSTR(VV_TRNDATE,2) || '' ||
                                    SUBSTR(VV_TTIME,2) || ' ' ||
                                    SUBSTR(VV_TID,2)|| ')');
    --standard.commit;
          commit;
    END;
    END;Thanks
    Sam
    Edited by: sam8682 on May 13, 2013 2:35 PM

  • Ora-06531 reference to uninitialized collection --- Please help

    Hello,
    I am getting this "ora-06531 reference to uninitialized collection" while executing the below procedure.
    =======================
    PROCEDURE iud_account_col
    ( pv_account_version IN account_version_t
    AS
    LC_USR_ID CONSTANT VARCHAR2(30) := pkg_util.get_usr_id ;
    LC_TMSTMP CONSTANT TIMESTAMP /*WITH TIME ZONE*/ := pkg_util.get_tmstmp ;
    lv_level VARCHAR2(100);
    lv_am_key_id number;
    lv_acct_cusip VARCHAR2(12);
    LC_AM_KEY_ID number;
    LC_AM_VER_NUM number;
    BEGIN
    DECLARE
    lv_am account_version_t;
    lv_amv account_maint_t;
    lv_amvv account_maint_version_t;
    cursor c_acct_cusip ( cv_am_key_id varchar2) is
    select acct_cusip
    from account_maintenance
    where am_key_id = lv_amv.am_key_id;
    BEGIN
    lv_am := pv_account_version;
    lv_level := 'ACCOUNT_MAINT' ;
    lv_amv := pv_account_version.account_maint;
    LC_AM_KEY_ID := lv_amv.am_key_id;
    FOR acct_cusip_info in c_acct_cusip (lv_am_key_id)
    LOOP
    lv_acct_cusip := acct_cusip_info.acct_cusip;
    END LOOP;
    IF lv_amv.action = 'I'
    THEN
    INSERT
    INTO
    account_maintenance
    ( am_key_id
    , acct_cusip
    , am_orig_cre_tmstp
    , am_orig_usr_id
    , delete_ind
    , add_usr_id
    , add_tmstmp
    , lock_level_num
    VALUES
    ( lv_amv.am_key_id
    , lv_amv.acct_cusip
    , LC_TMSTMP
    , LC_USR_ID
    , lv_amv.delete_ind
    , LC_USR_ID
    , LC_TMSTMP
    , lv_amv.lock_level_num
    END IF;
    lv_amvv := pv_account_version.account_maint.account_maint_version;
    lv_level := 'ACCOUNT_MAINT_VERSION';
    LC_AM_VER_NUM := lv_amvv.am_ver_num;
    IF lv_amvv.action = 'I'
    THEN
    -- Insert issue maint version
    INSERT
    INTO
    ACCOUNT_MAINTENANCE_VERSION
    ( AM_KEY_ID
    , AM_VER_NUM
    , ACCT_CUSIP
    , LEGAL_ENTITY
    , APPR_STATUS_REF_ID
    , INACTIVE_IND
    , ADD_USR_ID
    , ADD_TMSTMP
    , UPD_USR_ID
    , UPD_TMSTMP
    , LOCK_LEVEL_NUM
    VALUES
    ( lv_amv.am_key_id
    , lv_amvv.am_ver_num
    , lv_acct_cusip
    , lv_amvv.legal_entity
    , lv_amvv.appr_status_ref_id
    , 'N'
    , LC_USR_ID
    , LC_TMSTMP
    , LC_USR_ID
    , LC_TMSTMP
    , lv_amvv.lock_level_num
    END IF; --- end for account maint version.
    FOR j IN lv_amv.account_maint_comment_col.FIRST
    .. lv_amv.account_maint_comment_col.LAST
    LOOP
    DECLARE
    lv_amvc account_maint_comment_t;
    BEGIN
    lv_amvc := lv_amv.account_maint_comment_col(j);
    lv_level := 'ACCOUNT_MAINT_COMMENT';
    IF lv_amvc.action = 'I'
    THEN
    --- Insert into account maintenance comment table
    INSERT
    INTO
    ACCOUNT_MAINTENANCE_COMMENT
    ( AM_KEY_ID
    , AM_VER_NUM
    , COMMENT_NUM
    , COMMENT_TMSTP
    , COMMENT_TXT
    , INACTIVE_IND
    , ADD_USR_ID
    , ADD_TMSTMP
    , LOCK_LEVEL_NUM
    VALUES
    ( LC_AM_KEY_ID
    , LC_AM_VER_NUM
    , lv_amvc.comment_num
    , LC_TMSTMP
    , lv_amvc.comment_txt
    , 'N'
    , LC_USR_ID
    , LC_TMSTMP
    , lv_amvc.lock_level_num
    END IF;
    END;
    END LOOP; --- end loop for account maint comments
    END;
    COMMIT WORK;
    RETURN;
    EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK WORK;
    RAISE;
    END iud_account_col;
    ====================
    The UDT's are below:
    CREATE OR REPLACE TYPE ACCOUNT_VERSION_T
    AS OBJECT
         PORTFOLIO     PORTFOLIO_T
    ,     ACCOUNT_MAINT          ACCOUNT_MAINT_T
    CREATE OR REPLACE TYPE ACCOUNT_MAINT_T
    AS OBJECT
    ( AM_KEY_ID number
    , ACCT_CUSIP     varchar2(12)
    , DELETE_IND varchar2(1)
    , ADD_USR_ID varchar2(20)
    , ADD_TMSTMP timestamp
    , UPD_USR_ID varchar2(20)
    , UPD_TMSTMP timestamp
    , LOCK_LEVEL_NUM number
    , ACTION VARCHAR2(1)
    , ACCOUNT_MAINT_VERSION ACCOUNT_MAINT_VERSION_T
    , ACCOUNT_MAINT_COMMENT_COL ACCOUNT_MAINT_COMMENT_COL_T
    CREATE OR REPLACE TYPE ACCOUNT_MAINT_VERSION_T
    AS OBJECT
    ( AM_KEY_ID number
    , AM_VER_NUM number
    , ACCT_CUSIP     varchar2(12)
    , LEGAL_ENTITY varchar2(100)
    , APPR_STATUS_REF_ID number
    , FUND_INACTIVE_TMSTMP timestamp
    , ADD_USR_ID varchar2(20)
    , ADD_TMSTMP timestamp
    , UPD_USR_ID varchar2(20)
    , UPD_TMSTMP timestamp
    , LOCK_LEVEL_NUM number
    , ACTION VARCHAR2(1)
    CREATE OR REPLACE TYPE ACCOUNT_MAINT_COMMENT_T
    AS OBJECT
    ( AM_KEY_ID number
    , AM_VER_NUM number
    , COMMENT_NUM     number
    , COMMENT_TXT varchar2(400)
    , ADD_USR_ID varchar2(20)
    , ADD_TMSTMP timestamp
    , UPD_USR_ID varchar2(20)
    , UPD_TMSTMP timestamp
    , LOCK_LEVEL_NUM number
    , ACTION VARCHAR2(1)
    =====================================================
    This is how I am trying to execute:
    Declare
    pv_account_version account_version_t := account_version_t(null
    , account_maint_t ( 10041
    , '11111111'
    , 'N'
    ,'abc'
    , NULL
    , NULL
    , NULL
    , 1
    ,NULL-- 'I'
    ,ACCOUNT_MAINT_VERSION_T(10031
    , 10001
    , NULL
    ,'Legal entity'
    ,22
    ,NULL
    ,'abc'
    ,NULL
    , NULL
    ,NULL
    , 1
    ,NULL --'I'
    ,ACCOUNT_MAINT_COMMENT_COL_T(
    10031
    ,10001
    ,1001
    ,'My first comment'
    ,'abc'
    , NULL
    , NULL
    , NULL
    , 1
    , 'I')
    Begin
    pkg_cdm_process_v2.iud_account(pv_account_version);
    END;
    What am I doing wrong here....
    Please help.
    Thanks.

    Now if we only knew where the error was flagged.
    PROCEDURE Iud_account_col
         (pv_account_version  IN ACCOUNT_VERSION_T)
    AS
      lc_usr_id      CONSTANT VARCHAR2(30) := pkg_util.get_usr_id;
      lc_tmstmp      CONSTANT TIMESTAMP /*WITH TIME ZONE*/ := pkg_util.get_tmstmp;
      lv_level       VARCHAR2(100);
      lv_am_key_id   NUMBER;
      lv_acct_cusip  VARCHAR2(12);
      lc_am_key_id   NUMBER;
      lc_am_ver_num  NUMBER;
    BEGIN
      DECLARE
        lv_am    ACCOUNT_VERSION_T;
         lv_amv   ACCOUNT_MAINT_T;
         lv_amvv  ACCOUNT_MAINT_VERSION_T;
         CURSOR c_acct_cusip(cv_am_key_id VARCHAR2) IS
           SELECT acct_cusip
           FROM   account_maintenance
           WHERE  am_key_id = lv_amv.am_key_id;
      BEGIN
        lv_am := pv_account_version;
        lv_level := 'ACCOUNT_MAINT';
        lv_amv := pv_account_version.account_maint;
        lc_am_key_id := lv_amv.am_key_id;
        FOR acct_cusip_info IN c_acct_cusip(lv_am_key_id) LOOP
          lv_acct_cusip := acct_cusip_info.acct_cusip;
        END LOOP;
        IF lv_amv.ACTION = 'I' THEN
          INSERT INTO account_maintenance
                     (am_key_id,
                      acct_cusip,
                      am_orig_cre_tmstp,
                      am_orig_usr_id,
                      delete_ind,
                      add_usr_id,
                      add_tmstmp,
                      lock_level_num)
          VALUES     (lv_amv.am_key_id,
                      lv_amv.acct_cusip,
                      lc_tmstmp,
                      lc_usr_id,
                      lv_amv.delete_ind,
                      lc_usr_id,
                      lc_tmstmp,
                      lv_amv.lock_level_num);
        END IF;
        lv_amvv := pv_account_version.account_maint.account_maint_version;
        lv_level := 'ACCOUNT_MAINT_VERSION';
        lc_am_ver_num := lv_amvv.am_ver_num;
        IF lv_amvv.ACTION = 'I' THEN
          -- Insert issue maint version
          INSERT INTO account_maintenance_version
                     (am_key_id,
                      am_ver_num,
                      acct_cusip,
                      legal_entity,
                      appr_status_ref_id,
                      inactive_ind,
                      add_usr_id,
                      add_tmstmp,
                      upd_usr_id,
                      upd_tmstmp,
                      lock_level_num)
          VALUES     (lv_amv.am_key_id,
                      lv_amvv.am_ver_num,
                      lv_acct_cusip,
                      lv_amvv.legal_entity,
                      lv_amvv.appr_status_ref_id,
                      'N',
                      lc_usr_id,
                      lc_tmstmp,
                      lc_usr_id,
                      lc_tmstmp,
                      lv_amvv.lock_level_num);
        END IF; --- end for account maint version.
        FOR j IN lv_amv.account_maint_comment_col.FIRST.. lv_amv.account_maint_comment_col.LAST LOOP
          DECLARE
            lv_amvc  ACCOUNT_MAINT_COMMENT_T;
          BEGIN
            lv_amvc := lv_amv.Account_maint_comment_col(j);
            lv_level := 'ACCOUNT_MAINT_COMMENT';
            IF lv_amvc.ACTION = 'I' THEN
              --- Insert into account maintenance comment table
              INSERT INTO account_maintenance_comment
                         (am_key_id,
                          am_ver_num,
                          comment_num,
                          comment_tmstp,
                          comment_txt,
                          inactive_ind,
                          add_usr_id,
                          add_tmstmp,
                          lock_level_num)
              VALUES     (lc_am_key_id,
                          lc_am_ver_num,
                          lv_amvc.comment_num,
                          lc_tmstmp,
                          lv_amvc.comment_txt,
                          'N',
                          lc_usr_id,
                          lc_tmstmp,
                          lv_amvc.lock_level_num);
            END IF;
          END;
        END LOOP; --- end loop for account maint comments
      END;
      COMMIT WORK;
      RETURN;
    EXCEPTION
      WHEN OTHERS THEN
        ROLLBACK WORK;
        RAISE;
    END iud_account_col;

  • Ora-06531 reference to uninitialized collection

    Hello,
    I am getting this "ora-06531 reference to uninitialized collection" while executing the below procedure.
    =======================
    PROCEDURE iud_account_col
    ( pv_account_version IN account_version_t
    AS
    LC_USR_ID CONSTANT VARCHAR2(30) := pkg_util.get_usr_id ;
    LC_TMSTMP CONSTANT TIMESTAMP /*WITH TIME ZONE*/ := pkg_util.get_tmstmp ;
    lv_level VARCHAR2(100);
    lv_am_key_id number;
    lv_acct_cusip VARCHAR2(12);
    LC_AM_KEY_ID number;
    LC_AM_VER_NUM number;
    BEGIN
    DECLARE
    lv_am account_version_t;
    lv_amv account_maint_t;
    lv_amvv account_maint_version_t;
    cursor c_acct_cusip ( cv_am_key_id varchar2) is
    select acct_cusip
    from account_maintenance
    where am_key_id = lv_amv.am_key_id;
    BEGIN
    lv_am := pv_account_version;
    lv_level := 'ACCOUNT_MAINT' ;
    lv_amv := pv_account_version.account_maint;
    LC_AM_KEY_ID := lv_amv.am_key_id;
    FOR acct_cusip_info in c_acct_cusip (lv_am_key_id)
    LOOP
    lv_acct_cusip := acct_cusip_info.acct_cusip;
    END LOOP;
    IF lv_amv.action = 'I'
    THEN
    INSERT
    INTO
    account_maintenance
    ( am_key_id
    , acct_cusip
    , am_orig_cre_tmstp
    , am_orig_usr_id
    , delete_ind
    , add_usr_id
    , add_tmstmp
    , lock_level_num
    VALUES
    ( lv_amv.am_key_id
    , lv_amv.acct_cusip
    , LC_TMSTMP
    , LC_USR_ID
    , lv_amv.delete_ind
    , LC_USR_ID
    , LC_TMSTMP
    , lv_amv.lock_level_num
    END IF;
    lv_amvv := pv_account_version.account_maint.account_maint_version;
    lv_level := 'ACCOUNT_MAINT_VERSION';
    LC_AM_VER_NUM := lv_amvv.am_ver_num;
    IF lv_amvv.action = 'I'
    THEN
    -- Insert issue maint version
    INSERT
    INTO
    ACCOUNT_MAINTENANCE_VERSION
    ( AM_KEY_ID
    , AM_VER_NUM
    , ACCT_CUSIP
    , LEGAL_ENTITY
    , APPR_STATUS_REF_ID
    , INACTIVE_IND
    , ADD_USR_ID
    , ADD_TMSTMP
    , UPD_USR_ID
    , UPD_TMSTMP
    , LOCK_LEVEL_NUM
    VALUES
    ( lv_amv.am_key_id
    , lv_amvv.am_ver_num
    , lv_acct_cusip
    , lv_amvv.legal_entity
    , lv_amvv.appr_status_ref_id
    , 'N'
    , LC_USR_ID
    , LC_TMSTMP
    , LC_USR_ID
    , LC_TMSTMP
    , lv_amvv.lock_level_num
    END IF; --- end for account maint version.
    FOR j IN lv_amv.account_maint_comment_col.FIRST
    .. lv_amv.account_maint_comment_col.LAST
    LOOP
    DECLARE
    lv_amvc account_maint_comment_t;
    BEGIN
    lv_amvc := lv_amv.account_maint_comment_col(j);
    lv_level := 'ACCOUNT_MAINT_COMMENT';
    IF lv_amvc.action = 'I'
    THEN
    --- Insert into account maintenance comment table
    INSERT
    INTO
    ACCOUNT_MAINTENANCE_COMMENT
    ( AM_KEY_ID
    , AM_VER_NUM
    , COMMENT_NUM
    , COMMENT_TMSTP
    , COMMENT_TXT
    , INACTIVE_IND
    , ADD_USR_ID
    , ADD_TMSTMP
    , LOCK_LEVEL_NUM
    VALUES
    ( LC_AM_KEY_ID
    , LC_AM_VER_NUM
    , lv_amvc.comment_num
    , LC_TMSTMP
    , lv_amvc.comment_txt
    , 'N'
    , LC_USR_ID
    , LC_TMSTMP
    , lv_amvc.lock_level_num
    END IF;
    END;
    END LOOP; --- end loop for account maint comments
    END;
    COMMIT WORK;
    RETURN;
    EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK WORK;
    RAISE;
    END iud_account_col;
    ====================
    The UDT's are below:
    CREATE OR REPLACE TYPE ACCOUNT_VERSION_T
    AS OBJECT
    PORTFOLIO PORTFOLIO_T
    , ACCOUNT_MAINT ACCOUNT_MAINT_T
    CREATE OR REPLACE TYPE ACCOUNT_MAINT_T
    AS OBJECT
    ( AM_KEY_ID number
    , ACCT_CUSIP varchar2(12)
    , DELETE_IND varchar2(1)
    , ADD_USR_ID varchar2(20)
    , ADD_TMSTMP timestamp
    , UPD_USR_ID varchar2(20)
    , UPD_TMSTMP timestamp
    , LOCK_LEVEL_NUM number
    , ACTION VARCHAR2(1)
    , ACCOUNT_MAINT_VERSION ACCOUNT_MAINT_VERSION_T
    , ACCOUNT_MAINT_COMMENT_COL ACCOUNT_MAINT_COMMENT_COL_T
    CREATE OR REPLACE TYPE ACCOUNT_MAINT_VERSION_T
    AS OBJECT
    ( AM_KEY_ID number
    , AM_VER_NUM number
    , ACCT_CUSIP varchar2(12)
    , LEGAL_ENTITY varchar2(100)
    , APPR_STATUS_REF_ID number
    , FUND_INACTIVE_TMSTMP timestamp
    , ADD_USR_ID varchar2(20)
    , ADD_TMSTMP timestamp
    , UPD_USR_ID varchar2(20)
    , UPD_TMSTMP timestamp
    , LOCK_LEVEL_NUM number
    , ACTION VARCHAR2(1)
    CREATE OR REPLACE TYPE ACCOUNT_MAINT_COMMENT_T
    AS OBJECT
    ( AM_KEY_ID number
    , AM_VER_NUM number
    , COMMENT_NUM number
    , COMMENT_TXT varchar2(400)
    , ADD_USR_ID varchar2(20)
    , ADD_TMSTMP timestamp
    , UPD_USR_ID varchar2(20)
    , UPD_TMSTMP timestamp
    , LOCK_LEVEL_NUM number
    , ACTION VARCHAR2(1)
    CREATE OR REPLACE TYPE ACCOUNT_MAINT_COMMENT_COL_T AS TABLE OF ACCOUNT_MAINT_COMMENT_T;
    =====================================================
    This is how I am trying to execute:
    Declare
    pv_account_version account_version_t := account_version_t(null
    , account_maint_t ( 10041
    , '11111111'
    , 'N'
    ,'abc'
    , NULL
    , NULL
    , NULL
    , 1
    ,NULL-- 'I'
    ,ACCOUNT_MAINT_VERSION_T(10031
    , 10001
    , NULL
    ,'Legal entity'
    ,22
    ,NULL
    ,'abc'
    ,NULL
    , NULL
    ,NULL
    , 1
    ,NULL --'I'
    ,ACCOUNT_MAINT_COMMENT_COL_T(
    10031
    ,10001
    ,1001
    ,'My first comment'
    ,'abc'
    , NULL
    , NULL
    , NULL
    , 1
    , 'I')
    Begin
    pkg_cdm_process_v2.iud_account(pv_account_version);
    END;
    SQL> /
    Declare
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at "ACEENG.PKG_CDM_PROCESS_V2", line 799
    ORA-06512: at line 27
    What am I doing wrong here....
    Please help.

    Hi,
    Here is the table structures, data is in my procedure call.
    I get error only while testing for 'account_maintenance_comment' table, if I comment this part in my procedure, i won't get this error.
    CREATE TABLE ACCOUNT_MAINTENANCE
    AM_KEY_ID NUMBER(32) NOT NULL,
    ACCT_CUSIP VARCHAR2(12) NOT NULL,
    AM_ORIG_CRE_TMSTP TIMESTAMP(6) NOT NULL,
    AM_ORIG_USR_ID VARCHAR2(20) NOT NULL,
    DELETE_IND VARCHAR2(1) NULL,
    ADD_USR_ID VARCHAR2(20) NOT NULL,
    ADD_TMSTMP TIMESTAMP(6) NOT NULL,
    UPD_USR_ID VARCHAR2(20) NULL,
    UPD_TMSTMP TIMESTAMP(6) NULL,
    LOCK_LEVEL_NUM NUMBER(32) NOT NULL
    CREATE TABLE ACCOUNT_MAINTENANCE_VERSION
    AM_KEY_ID NUMBER(32) NOT NULL,
    AM_VER_NUM NUMBER(32) NOT NULL,
    ACCT_CUSIP VARCHAR2(12) NOT NULL,
    SNAME VARCHAR2(20) NULL,
    LNAME VARCHAR2(40) NULL,
    EXT_ACCT_NUM NUMBER NULL,
    ADVISOR_NM VARCHAR2(40) NULL,
    SUB_ADVISOR_NM VARCHAR2(40) NULL,
    LEGAL_ENTITY VARCHAR2(100) NULL,
    DISP_PWR_ADVISOR_NM VARCHAR2(40) NULL,
    VOT_PWR_ADVISOR_NM VARCHAR2(40) NULL,
    ACCT_TYP_CD VARCHAR2(10) NULL,
    ACCT_PUBLIC_NM VARCHAR2(40) NULL,
    CLIENT_TYP_CD VARCHAR2(1) NULL,
    CUSTODIAN_NM VARCHAR2(40) NULL,
    NATIONALITY VARCHAR2(40) NULL,
    PORTF_TEST_IND VARCHAR2(1) NULL,
    PILOT_PORTF_IND VARCHAR2(1) NULL,
    ELIG_IND_13DG VARCHAR2(1) NULL,
    RR_EXCLUDE_IND VARCHAR2(1) NULL,
    APPR_STATUS_REF_ID NUMBER(32) NULL,
    NEXT_REVIEW_TMSTMP TIMESTAMP(6) NULL,
    FUND_INACTIVE_TMSTMP TIMESTAMP(6) NULL,
    LAST_APPR_USR_ID VARCHAR2(20) NULL,
    LAST_APPR_TMSTMP TIMESTAMP(6) NULL,
    INACTIVE_IND VARCHAR2(1) NOT NULL,
    ADD_USR_ID VARCHAR2(20) NOT NULL,
    ADD_TMSTMP TIMESTAMP(6) NOT NULL,
    UPD_USR_ID VARCHAR2(20) NULL,
    UPD_TMSTMP TIMESTAMP(6) NULL,
    LOCK_LEVEL_NUM NUMBER(32) NOT NULL,
    CREATE TABLE ACCOUNT_MAINTENANCE_COMMENT
    AM_KEY_ID NUMBER(32) NOT NULL,
    AM_VER_NUM NUMBER(32) NULL,
    COMMENT_NUM NUMBER(32) NOT NULL,
    COMMENT_TMSTP TIMESTAMP(6) NOT NULL,
    COMMENT_TXT VARCHAR2(400) NULL,
    INACTIVE_IND VARCHAR2(1) NOT NULL,
    ADD_USR_ID VARCHAR2(20) NOT NULL,
    ADD_TMSTMP TIMESTAMP(6) NOT NULL,
    UPD_USR_ID VARCHAR2(20) NULL,
    UPD_TMSTMP TIMESTAMP(6) NULL,
    LOCK_LEVEL_NUM NUMBER(32) NOT NULL)

  • Reference to Uninitialized collection error

    Hi ,
    I am invoking one wrapper API from Database Adapter in Oracle soa suite 11g . The structure of the wrapper is
    1. employee
    -->(1..n)employee sites
    --->(1..n)employee contacts
    I am just trying to invoking API for creation of employee record without sites and contacts and it is throwing me the following error message
    -123456 TESTING66 FUEL CONVERSION Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'EMPLOYEEWRAPPER' failed due to: Stored procedure invocation error. Error while trying to prepare and execute the APPS.BPEL_EMPLOYEEWRAPPER.XXWFS_EMPLOYEES_SOA$CREATE_EMP API. An error occurred while preparing and executing the APPS.BPEL_EMPLOYEEWRAPPER.XXWFS_EMPLOYEE_SOA$CREATE_EMP API. Cause: java.sql.SQLException: ORA-06531: Reference to uninitialized collection ORA-06512: at "APPS.BPEL_EMPLOYEEWRAPPER", line 196 ORA-06512: at "APPS.BPEL_EMPLOYEEWRAPPER", line 262 ORA-06512: at line 1 ". The invoked JCA adapter raised a resource exception. Please examine the above error message carefully to determine a resolution. ORA-06531: Reference to uninitialized collection ORA-06512: at "APPS.BPEL_EMPLOYEEWRAPPER", line 196 ORA-06512: at "APPS.BPEL_EMPLOYEEWRAPPER", line 262 ORA-06512: at line 1 6531
    passing site and contact details are not mandatory one
    But when i am passing the employeesite and employee contact then it is not throwing this error message and the big strange thing is it is perfectly working when calling in sql prompt.
    Please help me...
    Thanks,

    1..n means the elements needs to be in the payload itself when calling the db adapter
    so skipping the elements isn't an option.
    the smallest payload you can use should be something like
    <employee>
    <employee sites/>
    <employee contacts/>
    </employee>

  • Reference to uninitialized collection

    Hi,
    I have created a Java stored procedure as follows:
    Type declaration:
    CREATE OR REPLACE TYPE transArray AS TABLE OF NUMBER(20)
    /Stored Java Class:
    CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED testCompTrans AS
    import java.math.BigDecimal;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.text.SimpleDateFormat;
    import oracle.sql.ARRAY;
    import oracle.sql.ArrayDescriptor;
    public class testCompTrans {
         public static void callCompTrans(oracle.sql.ARRAY[] returnCompTrans, int memId, int month,
              int year, int freq, int empWrkgDays, BigDecimal baseSalary, BigDecimal agreedCurrRate,
              String paycycle, String cutoff, String companyCode, String payCurrCode, Date dateJoined){
              int arrayLength = 2;
              BigDecimal[] trans = new BigDecimal[arrayLength];
              BigDecimal rate = new BigDecimal("0");
              try{
                   prorate = compProrate(memId, month, year, freq, empWrkgDays, baseSalary, agreedCurrRate, paycycle,
                             cutoff, companyCode, payCurrCode, dateJoined);
                   for(int i=0;i<arrayLength;i++){
                        rate = trans;
                        System.out.println(rate);
                   Connection conn = DriverManager.getConnection("jdbc:default:connection:");
                   ArrayDescriptor desc = ArrayDescriptor.createDescriptor("transArray",conn);
                   returnCompTrans[0] = new ARRAY(desc,conn,prorate);
              }catch (Exception e){
                   e.printStackTrace();
         }Stored procedure: (from a package)PROCEDURE SP_COMPTRANS(returnCompTrans OUT transArray, memId IN NUMBER, payMonth IN NUMBER, payYear IN NUMBER, freq IN NUMBER,
    empWrkgDays IN NUMBER, baseSalary IN NUMBER, agreedCurrRate IN NUMBER, paycycle IN VARCHAR2, cutOff IN VARCHAR2,
    companyCode IN VARCHAR2, payCurrCode IN VARCHAR2, dateJoined IN DATE)
    AS LANGUAGE JAVA
    NAME 'ori.payroll.OriCompProrate.callCompProrate(oracle.sql.ARRAY[], int, int, int, int, int, java.math.BigDecimal, java.math.BigDecimal, java.lang.String, java.lang.String,
    java.lang.String, java.lang.String, java.util.Date)';
    I have another stored procedure which will call and process this for each employee - SP_PAYRUN. I just added this:
    Initialization:CREATE OR REPLACE PROCEDURE SP_PAYRUN(EMP_FROM VARCHAR2, EMP_TO VARCHAR2, PAY_YEAR NUMBER, PAY_MONTH NUMBER)
    AS
    ARRAYTRANS testArray := testArray(); .....
    PG_PAY_RUN.SP_COMPTRANS(ARRAYTRANS, MEMID, PAY_MONTH, PAY_YEAR, FREQ, MTH_WRKG_DAYS, BASE_SALARY, AGREED_CURR_RATE,
    PAYCYCLE, 'PY', COMP_CODE, PAY_CURR_CODE, JOINED_DATE);
    --I just added this to check the result:
    BASE_SALARY := ARRAYTRANS(1);
    DBMS_OUTPUT.PUT_LINE(BASE_SALARY);Then, executed the SP_PAYRUN in SQL* Plus:set serveroutput on size 20000
    execute SP_PAYRUN('2345', '29708161', 2008, 1);this outputs the base_salary but only after 3 or 4 employees and then I get this error:
    BEGIN SP_PAYROLLRUN('2345', '29708161', 2008, 1); END;
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at "SP_PAYRUN", line 270
    ORA-06512: at line 1
    I have tried testing my java stored procedure with only one employee and it worked.
    The stored procedure should return 21 employees.  What could be the problem with this? Thanks in advance.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

    Hi,
    thanks for your reply. I've also visited this link and already added above the solution it gave:
    I have another stored procedure which will call and process this for each employee - SP_PAYRUN. I just added this:
    Initialization:
    CREATE OR REPLACE PROCEDURE SP_PAYRUN(EMP_FROM VARCHAR2, EMP_TO VARCHAR2, PAY_YEAR NUMBER, PAY_MONTH NUMBER)
    AS
    ARRAYTRANS testArray := testArray(); The procedure returns something but not all. I was expecting 21 data but it only returned the first 3 or 4 or sometimes 5..

  • ORA-06530: Reference to uninitialized composite

    I have,
    Created an Object:
    CREATE OR REPLACE  TYPE opt_val_rec AS  OBJECT (
        parametervalue     VARCHAR2(1),
        PARAMETERID          varchar2(4000)
        );Created a table type:
         create  OR REPLACE  type  OPTVAL_TAB as  table of OPT_VAL_REC;
         Procedure to get the values into table type:
    Create or replace  procedure test_parm_val (id in varchar2 ,result out  varchar2) as
    pos number:=0;
      test_paramval                                 OPTVAL_TAB:= OPTVAL_TAB (null);
    paramval_ord   OPTVAL_TAB:= OPTVAL_TAB (null);
    begin
    for I in (select DISTINCT param_name from  param_tbl)
    loop
    test_paramval.extend(10);
    POS :=POS+1;
    test_paramval (POS).PARAMETERVALUE:= get_param_val_fnc(id,I.PARAM_NAME);
    test_paramval(POS). parameterid:=I.PARAM_NAME;
    end loop;
    SELECT CAST (MULTISET( SELECT  pv.PARAMETERVALUE,
                                       pv.parameterid
                                FROM TABLE (PARAMVAL)pv
                                                                                                      ORDER BY pv.PARAMETERVALUE)
                             AS OPTVAL_TAB)
        INTO paramval_ord
        FROM dual;*/
    exception
    when others then
    NULL;
    End;
    end test_parm_valNow when executing the procedure, facing the above error mentioned in the subject.
    Please help.

    You initialized collection but not the object:
    SQL> declare
      2      pos number:=0;
      3      test_paramval OPTVAL_TAB:= OPTVAL_TAB (null);
      4  begin
      5      test_paramval.extend(10);
      6      POS :=POS+1;
      7      test_paramval (POS).PARAMETERVALUE:= 'X';
      8      test_paramval(POS). parameterid:='Y';
      9  end;
    10  /
    declare
    ERROR at line 1:
    ORA-06530: Reference to uninitialized composite
    ORA-06512: at line 7
    SQL> declare
      2      pos number:=0;
      3      test_paramval OPTVAL_TAB:= OPTVAL_TAB (null);
      4  begin
      5      test_paramval.extend(10);
      6      POS :=POS+1;
      7      test_paramval (POS) := opt_val_rec(null,null);
      8      test_paramval (POS).PARAMETERVALUE:= 'X';
      9      test_paramval(POS). parameterid:='Y';
    10  end;
    11  /
    PL/SQL procedure successfully completed.
    SQL> -- or better
    SQL> declare
      2      pos number:=0;
      3      test_paramval OPTVAL_TAB:= OPTVAL_TAB (null);
      4  begin
      5      test_paramval.extend(10);
      6      POS :=POS+1;
      7      test_paramval (POS) := opt_val_rec('X','Y');
      8  end;
      9  /
    PL/SQL procedure successfully completed.
    SQL> So change:
    test_paramval (POS).PARAMETERVALUE:= get_param_val_fnc(id,I.PARAM_NAME);
    test_paramval(POS). parameterid:=I.PARAM_NAME;to
    test_paramval(POS) := opt_val_rec(get_param_val_fnc(id,I.PARAM_NAME),I.PARAM_NAME);SY.

  • Oracle error  ORA-06531

    HI
    what is solution for this error --urget
    ORA-06531: Reference to uninitialized collection
    regards
    Yashavanth

    The desc of error seems explain enough :
    ORA-06531 Reference to uninitialized collectionCause: An element or member function of a nested table or VARRAY was referenced (where an initialized collection is needed) without the collection having been initialized.
    Action: Initialize the collection with an appropriate constructor or whole-object assignment.
    Nicolas.

  • Sdo_geor.mosaic ends with ORA-06531

    I'm using Oracle 11g R1, and try the enhanced mosaic function, but i always get this error.
    ORA-06531: Reference to uninitialized collection
    The SQL:
    DECLARE
    gr sdo_georaster;
    BEGIN
    INSERT INTO LGVHH05 (id, georaster) VALUES (1, sdo_geor.init('LGVHH05_RDT')) RETURNING georaster INTO gr;
    sdo_geor.mosaic('LGVHH05_TILE', 'GEORASTER', gr, 'blocksize=(1024,1024,3)');
    UPDATE LGVHH05 SET georaster=gr WHERE id=1;
    END;
    I'm wondering what collection this could be?
    The GeoRaster objects are valid and have the same SRID.

    thanks so far, here is the metadata:
    GEORASTER.METADATA
    <georasterMetadata xmlns="http://xmlns.oracle.com/spatial/georaster">
    <objectInfo>
    <rasterType>21001</rasterType>
    <isBlank>false</isBlank>
    <defaultRed>1</defaultRed>
    <defaultGreen>2</defaultGreen>
    <defaultBlue>3</defaultBlue>
    </objectInfo>
    <rasterInfo>
    <cellRepresentation>UNDEFINED</cellRepresentation>
    <cellDepth>8BIT_U</cellDepth>
    <totalDimensions>3</totalDimensions>
    <dimensionSize type="ROW">
    <size>4001</size>
    </dimensionSize>
    <dimensionSize type="COLUMN">
    <size>4001</size>
    </dimensionSize>
    <dimensionSize type="BAND">
    <size>3</size>
    </dimensionSize>
    <ULTCoordinate>
    <row>0</row>
    <column>0</column>
    <band>0</band>
    </ULTCoordinate>
    <blocking>
    <type>REGULAR</type>
    <totalRowBlocks>16</totalRowBlocks>
    <totalColumnBlocks>16</totalColumnBlocks>
    <rowBlockSize>256</rowBlockSize>
    <columnBlockSize>256</columnBlockSize>
    </blocking>
    <interleaving>BIP</interleaving>
    <pyramid>
    <type>NONE</type>
    </pyramid>
    <compression>
    <type>NONE</type>
    </compression>
    </rasterInfo>
    <spatialReferenceInfo>
    <isReferenced>true</isReferenced>
    <isRectified>true</isRectified>
    <SRID>31467</SRID>
    <spatialResolution dimensionType="X">
    <resolution>0.5</resolution>
    </spatialResolution>
    <spatialResolution dimensionType="Y">
    <resolution>0.5</resolution>
    </spatialResolution>
    <modelCoordinateLocation>CENTER</modelCoordinateLocation>
    <modelType>FunctionalFitting</modelType>
    <polynomialModel rowOff="0.0" columnOff="0.0" xOff="0.0" yOff="0.0" zOff="0" rowScale="1.0" columnScale="1.0" xScale="1.0" yScale="1.0" zScale="1.0">
    <pPolynomial pType="1" nVars="2" order="1" nCoefficients="3">
    <polynomialCoefficients>1.1852E7 0.0 -2.0</polynomialCoefficients>
    </pPolynomial>
    <qPolynomial pType="1" nVars="0" order="0" nCoefficients="1">
    <polynomialCoefficients>1.0</polynomialCoefficients>
    </qPolynomial>
    <rPolynomial pType="1" nVars="2" order="1" nCoefficients="3">
    <polynomialCoefficients>-7104000.0 2.0 0.0</polynomialCoefficients>
    </rPolynomial>
    <sPolynomial pType="1" nVars="0" order="0" nCoefficients="1">
    <polynomialCoefficients>1.0</polynomialCoefficients>
    </sPolynomial>
    </polynomialModel>
    </spatialReferenceInfo>
    <layerInfo>
    <layerDimension>BAND</layerDimension>
    </layerInfo>
    </georasterMetadata>

  • How to deal with error ORA-06531 for collection

    All,
    Can anybody see anything wrong with my code below. As far as I can see everything is in order but I am getting the ORA-06531 error.
    Thanks in advance
    CREATE OR REPLACE
    Type T_PREO_PRIV is Object
    PRIVILEGE_ID NUMBER(10),
    PRIVILEGE_NAME VARCHAR2(20),
    PRIVILEGE_TYPE CHAR(1))
    CREATE OR REPLACE
    TYPE T_PRIVInfo IS TABLE OF PREORDER.
    T_PREO_PRIV
    SQL> CREATE OR REPLACE Procedure PREORDER.P_GetUserPrivlegetest(Userid in number, UserPriv out T_PRI
    VInfo, status out number)
    2 as
    3 V_UserPriv T_PRIVInfo;
    4 begin
    5 select T_PREO_PRIV(preo_priv.privilege_id, PRIVILEGE_NAME, PRIVILEGE_TYPE)
    6 BULK COLLECT INTO V_UserPriv
    7 from preo_user_role, preo_role_priv, preo_priv
    8 where preo_user_role.role_id = preo_role_priv.role_id
    9 and preo_role_priv.privilege_id = preo_priv.privilege_id
    10 and user_id = Userid;
    11
    12 V_UserPriv := UserPriv;
    13
    14 status := 0;
    15
    16 EXCEPTION
    17 WHEN OTHERS THEN
    18
    19 Status := -1;
    20 end;
    21 /
    Procedure created.
    SQL>
    SQL> DECLARE
    2 profile_info T_PRIVInfo;
    3 Status smallint;
    4 BEGIN
    5
    6 --preo_security.P_GetUserPrivlege(42, profile_info, status);
    7 P_GetUserPrivlegeTest(42, profile_info, status);
    8 dbms_output.put_line('P_GetUserPrivlege '||Status);
    9 For i in profile_info.FIRST..profile_info.LAST loop
    10
    11 dbms_output.put_line('******************************* ');
    12 -- dbms_output.put_line('privilege_id '||UserPriv(i).privilege_id);
    13 -- dbms_output.put_line('privilege_name '||UserPriv(i).privilege_name);
    14 -- dbms_output.put_line('privilege_type '||UserPriv(i).privilege_type);
    15 end loop;
    16
    17 END;
    18 /
    P_GetUserPrivlege -1
    DECLARE
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at line 9

    As in your other post, you have these reversed. The line that says
    V_UserPriv := UserPriv;
    should be
    UserPriv := V_UserPriv;
    There may also be other errors; I didn't check.

  • ORA-06531:collection error in trigger.

    We are using DBMS_XMLSave to insert data into an object nested view. Error ORA-06531 causes the trigger to fail when trying to access the collection count.. Below is the XML, view and trigger. What is missing or are we running into a bug?
    Thanks
    ****************************** XML ****************************
    <?xml version = '1.0'?>
    <ROWSET>
    <ROW>
    <ArrestNumber>2</ArrestNumber>
    <IMErrors>
    <IMErrors_ITEM>
    <ResponseErrorCode>CODE 2</ResponseErrorCode>
    <ResponseErrorDesc>DESC 2</ResponseErrorDesc>
    </IMErrors_ITEM>
    <IMErrors_ITEM>
    <ResponseErrorCode>CODE 1</ResponseErrorCode>
    <ResponseErrorDesc>DESC 1</ResponseErrorDesc>
    </IMErrors_ITEM>
    </IMErrors>
    </ROW>
    </ROWSET>
    ************************* VIEW ****************************
    CREATE OR REPLACE TYPE sjs.imres_error_type AS OBJECT
    ("ResponseErrorCode"     VARCHAR2(10),
    "ResponseErrorDesc"     VARCHAR2(4000))
    CREATE OR REPLACE TYPE sjs.imres_errors_type AS TABLE OF imres_error_type
    CREATE OR REPLACE VIEW sjs.imresponse
    AS SELECT ith.a_id AS "ArrestNumber",
    CAST(MULTISET(SELECT ire.errorcode,
    ire.errordesc
    FROM sjs.imresponseerrors ire
    WHERE ire.ith_id = ith.ith_id) AS imres_errors_type) AS "IMerrors"
    FROM sjs.imtransactionhistory ith
    ************************* TRIGGER ****************************
    CREATE OR REPLACE TRIGGER sjs.imresponse_new INSTEAD OF INSERT ON sjs.imresponse FOR EACH ROW
    DECLARE
    error_list      imres_errors_type;
    error_t      imres_error_type;
    ith_id_holder NUMBER(18);
    cnt          NUMBER;
    BEGIN
    INSERT INTO imtransactionhistory(a_id,interfacetransaction,ith_nysid,ith_fbi,ith_cjtn)
    VALUES(:new."ArrestNumber",'PENDING','PENDING','PENDING','PENDING');
    SELECT sjs.ith_sequence.currval INTO ith_id_holder FROM dual;
    error_list := :new."IMerrors";
    cnt := error_list.count;
    -- FOR i IN 1..cnt LOOP
    -- error_t := error_list(i);
    -- INSERT INTO imresponseerrors(ith_id,errorcode,errordesc)
    -- VALUES(ith_id_holder,error_t."ResponseErrorCode",error_t."ResponseErrorDesc");
    -- END LOOP;
    END;
    ************************* ERROR ****************************
    ERROR at line 1:
    ORA-29532: Java call terminated by uncaught Java exception: oracle.xml.sql.OracleXMLSQLException:
    'oracle.jdbc.driver.OracleSQLException: ORA-06531: Reference to uninitialized collection
    ORA-06512: at "SJS.IMRESPONSE_NEW", line 11
    ORA-04088: error during execution of trigger 'SJS.IMRESPONSE_NEW'
    ' encountered during processing ROW element 0. All prior XML row changes were rolled back. in the XM
    ORA-06512: at "SJS.XML_UTIL", line 72
    ORA-06512: at "SJS.IMRES", line 35
    ORA-06512: at line 6

    Frank
    error_list is a collection. What happens if you use an index with it? E.G.
    error_list(1) := :new."IMerrors";
    Cheers, APC

  • Uninitialized collection error

    All,
    I got the error ORA-06531: Reference to uninitialized collection. I cannot see any worong in my code(posted below). Could some one please tell me what wrong in my code?
    Thanks In advance!!
    CREATE OR REPLACE
    Type T_PREO_Access_ProfileTest is Object
    BUREAU_ID NUMBER(10),
    AB_CODE VARCHAR2(4),
    BUREAU_NAME VARCHAR2(20));
    CREATE OR REPLACE
    TYPE T_ProfileInfoTest IS TABLE OF PREORDER.T_PREO_Access_profiletest;
    Procedure P_GetAccessProfileTest(userid in number, selectBureau out T_ProfileInfoTest, status out number)
    as
    profile_info T_ProfileInfo;
    Bureau_info T_ProfileInfoTest; V_BUREAU_ID      PREO_BUREAU.BUREAU_ID%type;
    V_AGENCY_ID PREO_BUREAU.AGENCY_ID%type;
    BEGIN
         select T_PREO_Access_ProfileTest(BUREAU_ID, AB_CODE, BUREAU_NAME)
         BULK COLLECT INTO Bureau_info
         from preo_bureau
         where AGENCY_ID in (select AGENCY_ID from preo_access_profile where ID =                     userid and id_type = 'U')
         and BUREAU_ID not in (select BUREAU_ID from preo_access_profile where ID =                     userid and id_type = 'U');
         Bureau_info := selectBureau;     
         status := 0;
         EXCEPTION
    WHEN OTHERS THEN
                   Status := -1;
    END;
    SQL> DECLARE
    2 V_Bureau T_ProfileInfoTest; 3 Status smallint;
    4 BEGIN
    5
    6 preo_security.P_GetAccessProfileTest(42, V_Bureau, Status);
    7 dbms_output.put_line('GetProfile '||Status);
    8
    9 For i in V_Bureau.FIRST..V_Bureau.LAST loop
    10
    11 dbms_output.put_line('******************************* ');
    12 dbms_output.put_line('BUREAU_code '||V_Bureau(i).AB_CODE);
    13 dbms_output.put_line('BUREAU_name '||V_Bureau(i).BUREAU_name);
    14 end loop;
    15
    16
    17 END;
    18 /
    DECLARE
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collectionORA-06512: at line 9

    The following line
    Bureau_info := selectBureau;
    should be
    selectBureau := Bureau_info;
    There may also be other errors.

  • Varray of Objects: Initializing, Instantiation, Constructors, ORA-06531

         This is supposed to fill a varray with ten objects, calling methods in those objects and populating the objects from queries, then display fields from the objects via methods.  Error message is in comment at bottom.  Any ideas?
    -- Enable screen I/O
    SET SERVEROUTPUT ON SIZE 1000000
    SET VERIFY OFF
    -- object spec
      CREATE OR REPLACE TYPE employee4 AS OBJECT
      o_ename CHAR (20 char),
      o_empno NUMBER (4),
      o_sal NUMBER (10),
      o_thisno NUMBER (4),
      MEMBER FUNCTION get_o_ename RETURN CHAR, MEMBER PROCEDURE set_o_ename (o_thisno IN number),
      MEMBER FUNCTION get_o_empno RETURN NUMBER, MEMBER PROCEDURE set_o_empno (o_thisno IN number),
      MEMBER FUNCTION get_o_sal RETURN NUMBER, MEMBER PROCEDURE set_o_sal (o_thisno IN number),
      CONSTRUCTOR FUNCTION employee4 (o_ename CHAR,o_empno NUMBER,o_sal NUMBER,o_thisno NUMBER) RETURN SELF AS RESULT
    -- object body
      CREATE OR REPLACE TYPE BODY employee4 AS
      CONSTRUCTOR FUNCTION employee4 (o_ename IN CHAR,
      o_empno IN NUMBER,
      o_sal IN NUMBER,
      o_thisno IN NUMBER)
      RETURN SELF AS RESULT IS
      BEGIN
      SELF.o_ename := o_ename;
      SELF.o_empno := o_empno;
      SELF.o_sal := o_sal;
      SELF.o_thisno := o_thisno;
      RETURN;
      END;
      -- gets
      MEMBER FUNCTION get_o_ename RETURN CHAR IS
      BEGIN
      RETURN self.o_ename;
      END;
      MEMBER FUNCTION get_o_empno RETURN NUMBER IS
      BEGIN
      RETURN self.o_empno;
      END;
      MEMBER FUNCTION get_o_sal RETURN NUMBER IS
      BEGIN
      RETURN self.o_ename;
      END;
      -- sets
      MEMBER PROCEDURE set_o_ename(o_thisno IN number) IS
      BEGIN
      SELECT ename INTO SELF.o_ename FROM emp WHERE empno = SELF.o_thisno;
      END;
      MEMBER PROCEDURE set_o_empno(o_thisno IN number) IS
      BEGIN
      SELECT empno INTO SELF.o_empno FROM emp WHERE empno = SELF.o_thisno;
      END;
      MEMBER PROCEDURE set_o_sal(o_thisno IN number) IS
      BEGIN
      SELECT sal INTO SELF.o_sal FROM emp WHERE empno = SELF.o_thisno;
      END;
      END;
    DECLARE
      -- a varray of employees
      TYPE emp_varray1 IS VARRAY(10) OF employee4;
      varray_of_emps  EMP_VARRAY1;
      -- List of EMPNO's in order of appearance in EMP table (for cross-referencing, single-line retrieval)
      TYPE MYCREF_VARRAY IS VARRAY(10) OF NUMBER(4);
      varray_mycref MYCREF_VARRAY := MYCREF_VARRAY(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
      -- make a variable to store one empno
      thisno NUMBER(4);
      -- make a counter
      counter INT;
      -- query variables for the set calls
      q_ename CHAR(20 CHAR);
      q_empno NUMBER(4);
      q_sal NUMBER(10);
    BEGIN
      -- Put the first 10 EMPNO's in my cref array
      SELECT empno BULK COLLECT INTO varray_mycref FROM emp WHERE ROWNUM < 11;
      -- Use a loop to retrieve the first 10 objects in the "emp" table and put them in the varray of objects
      FOR counter IN 1..10 LOOP
      thisno := varray_mycref(counter);
      varray_of_emps(counter).set_o_ename(thisno);
      varray_of_emps(counter).set_o_empno(thisno);
      varray_of_emps(counter).set_o_sal(thisno);
      END LOOP;
      -- Use another loop to display the information in the reverse order.
      FOR counter in REVERSE 1..10 LOOP
      dbms_output.put_line((varray_of_emps(counter).get_o_ename()) || CHR(9) || (varray_of_emps(counter).get_o_empno()) || CHR(9) || (varray_of_emps(counter).get_o_sal()));
      END LOOP;
    END;
      This results in the following response in SQL*PLUS:
    Type created.
    Type body created.
    DECLARE
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at line 33

    Hi,
    From metalink:
    Cause: An element or member function of a nested table or varray was
    referenced (where an initialized collection is needed) without the
    collection having been initialized.
    Action: Initialize the collection with an appropriate constructor or
    whole-object assignment.
    ORA 6531 Reference to uninitialized collection (Doc ID 48912.1)

  • Error in PL/SQL documentation regarding multidimensional collections?

    Hi
    This is a small issue, but I think the following, from PL/SQL reference 11.2 (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#BABIBDDG), is wrongly calling the data types (and the variables created of those types) nested tables.
    Surely, anywhere you see "INDEX BY ..." it's an associative array. Hence, ntb1 is an associative array of associative arrays, and ntb2 is an associative array of varrays. Am I right?
    Thanks,
    Jason
    Example 5–13 Nested Tables of Associative Arrays and Varrays of Strings
    DECLARE
      TYPE tb1 IS TABLE OF INTEGER INDEX BY PLS_INTEGER; -- associative arrays
      v4 tb1;
      v5 tb1;
      TYPE ntb1 IS TABLE OF tb1 INDEX BY PLS_INTEGER; -- nested table of
      v2 ntb1; -- associative arrays
      TYPE va1 IS VARRAY(10) OF VARCHAR2(20); -- varray of strings
      v1 va1 := va1('hello', 'world');
      TYPE ntb2 IS TABLE OF va1 INDEX BY PLS_INTEGER; -- nested table of varrays
      v3 ntb2;
    BEGIN
      v4(1) := 34; -- populate associative array
      v4(2) := 46456;
      v4(456) := 343;
      v2(23) := v4; -- populate nested table of associative arrays
      v3(34) := va1(33, 456, 656, 343); -- populate nested table of varrays
      v2(35) := v5; -- assign empty associative array to v2(35)
      v2(35)(2) := 78;
    END;
    /

    >
    This is a small issue, but I think the following, from PL/SQL reference 11.2 (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#BABIBDDG), is wrongly calling the data types (and the variables created of those types) nested tables.
    Surely, anywhere you see "INDEX BY ..." it's an associative array. Hence, ntb1 is an associative array of associative arrays, and ntb2 is an associative array of varrays. Am I right?
    >
    Yes - the documentation is wrong on that point.
    One of the key differences between an associative array and a nested table is how they are treated after creation if they have not yet been populated. The array is treated as EMPTY while the nested table is treated as UNITIALIZED.
    The doc states this as well
    >
    Like a database table, an associative array:
    Is empty (but not null) until you populate it
    An uninitialized nested table variable is a null collection. You must initialize it, either by making it empty or by assigning a non-NULL value to it.
    >
    You can see that particular difference with this sample code.
    DECLARE
      TYPE array_test1 IS table of VARCHAR2(15) index by PLS_INTEGER;
      my_array1 array_test1;
      TYPE nt_test1 IS TABLE OF VARCHAR2(15);  -- nested table type
      my_nt1 nt_test1; 
    BEGIN
    --  dbms_output.put_line('array 1 [' || my_array1(0) || '].');
      dbms_output.put_line('nt 1 [' || my_nt1(0) || '].');
    END;The above will give this exception:
    >
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at line 11
    >
    If you 'uncomment' the first line and comment the second you will get a different exception:
    >
    ORA-01403: no data found
    ORA-06512: at line 9

  • Collection Types ORA-06531

    I used JDeveloper to generate custom classes for an Oracle package. In that package, a function returns an array (of Oracle objects). JDeveloper created the custom class for the package(sitepkg.sqlj), and 3 additional custom classes to support the referenced Oracle object collections(Physicallocobj.sqlj - this is the Oracle object; PhysicallocobjRef.java; Physicallocobjtbl.java - this is the collection of the Oracle object).
    I import the files into my program:
    import DBAInfo1.sitepkg;
    import DBAInfo1.Physicallocobj;
    import DBAInfo1.PhysicallocobjRef;
    import DBAInfo1.Physicallocobjtbl;
    I declare the corresponding variables:
    public static sitepkg SiteDBI = null;
    public static Physicallocobjtbl SiteList = null;
    I initialize the variables:
    SiteDBI = new sitepkg();
    SiteList = new Physicallocobjtbl();
    And when I invoke a method of the SiteDBI object, the ORA-06531 error is raised
    SiteList = SiteDBI.ListSites();
    The error message is as follows:
    )RA-06531: Reference to uninitialized collection
    ORA-06512: at "WEBDEVADMIN.SITEPKG", line 81
    ORA-06512: at line 1
    The method definition for ListSites is as follows:
    public Physicallocobjtbl ListSites ()
    throws SQLException
    Physicallocobjtbl __jPt_result;
    #sql [_ctx] __jPt_result = { VALUES(SITEPKG.FLISTSITES()) };
    return __jPt_result;
    How does one correctly initialize the collection?
    null

    Charles, I can't answer your question, but I suggest you take a look at the SQLJ documentation, which has some sections on collections (select Technologies on the left of this page, then select SQLJ&JDBC, then Documentation). You might also want to post this question to the SQLJ/JDBC forum.
    Blaise

Maybe you are looking for

  • How necessary is a separate scratch drive??

    Greetings from cold, windy Humboldt, I'm looking into buying a new 15" macbook pro w/ my student discount and using FCP 5.1 to edit a short film on it. I do not have any form of external drive and quite honestly I won't have any money left to buy one

  • Commitments from Requisitions

    We have a purchase requisition with split account assignment to three different WBS elements.  A purchase order was created for this requisition, but the requisition still shows up on the Commitment Line Items for Projects report.   The committed cos

  • On Time Delivey and reason coding for late

    Were on ECC 5.0 and looking at trying to link "reasons" for late delivery to the SAP shipment.  Has anyone done this or have any suggestions on ways to configure list of "reasons" and how to link them to the shipment number?   In 3.1i we had a way to

  • How to make reader.ready() return false

    reader.ready() method returned false for me when reading from when reader is obtained from databse. eg. Clob reader. So that can be acceptable that next call may block thats why ready() returned false. But i want to simulate situation when reader.rea

  • Multiple Quizzes using Captivate 3

    I am currently using Captivate 3 and I had a very large project with multiple quizzes.  Captivate was able to go through the first quiz, but every time I hit another quiz, the system would freeze. I am looking to do multiple quizzes - does anyone kno