Reference to uninitialized composite

Lately we experience intermittent problems deleting data from tables with TAPI/TAPI triggers and CAPI packages (Headstart 6i). When deleting a relatively large number of rows, in this case 900, we get an ORA-06530 error which seems to be caused by the TAPI del procedure. Below is an example of the delete statement and subsequent error.
If we limit the number of rows to be deleted at once to e.g. 100 the problem disappears !
Has anyone experienced a similar problem and does somebody know what the cause and solution is ?
Thank you, Marcel.
delete from gns_demand_values
where cde_id in (select id from gns_customer_demand_structures where cdn_id=38);
delete from gns_demand_values
ERROR at line 1:
ORA-20999:
ORA-06512: at "HST65.CG$ERRORS", line 562
ORA-06512: at "GNS_OWN.CG$GNS_DEMAND_VALUES", line 1007
ORA-06530: Reference to uninitialized composite
ORA-06512: at "GNS_OWN.CG$BDR_GNS_DEMAND_VALUES", line 55
ORA-04088: error during execution of trigger 'GNS_OWN.CG$BDR_GNS_DEMAND_VALUES'
SQL> @messages
Error QMS-00100: Unhandled Exception ORA-06530: Reference to uninitialized composite in PL/SQL Program Unit cg$GNS_DEMAND_VALUES.del.others
Contact Helpdesk
PL/SQL procedure successfully completed.

CDM RuleFrame is optimized for very fast interactive processing. There are a number of known issues related to performance of the CAPI during batch operations. In the Headstart User Guide, in the Business Logic Layer section, we have documented a number of strategies to address this problem. It sounds like you are probably running into some kind of stack overflow. That would explain why both limiting the number of rows processed and disabling the rules in question both resolve the problem.
Regards,
Lauri

Similar Messages

  • 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.

  • 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-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

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

  • 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>

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

  • Error when using composite type

    HI i am getting following error when my plsql procedure uses composite type.
    ORA-06530: Reference to uninitialized composite ORA-06512: at "PRODMSTR.PKG_BULKLOAD", line 65
      PROCEDURE insertData(pd_rec temp_product_details%ROWTYPE)
        IS
        v_pdid product_details.pd_id%TYPE;
        v_pdesc product_details.pd_desc%TYPE;
        v_phid product_details.ph_id%TYPE;
        v_rpdid product_details.pd_id%TYPE;
        v_catid lkp_category.category_id%TYPE;
        v_lfid lkp_life_cycle.life_cycle_id%TYPE;
        v_ptid lkp_product_type.pt_id%TYPE;
        v_tpvid lkp_third_party_vendor.tpv_id%TYPE;
        v_product_details product_details_type;
        v_product_market product_market_array;
        v_product_data_type product_data_type;
        out_par sys_refcursor;
        BEGIN
            IF(TRIM(pd_rec.product_id)IS NOT NULL) THEN
             v_product_details.product_id:= TO_NUMBER(pd_rec.product_id);
            ELSE
                 v_product_details.product_id:=0;
            END IF;Here is the part of the code. The error occurs in line:
    v_product_details.product_id:= TO_NUMBER(pd_rec.product_id);
    Can anyone tell me why i am getting this?
    Thanks a lot guys.

    Hi,
    This could be due to the reason that the variable v_product_details is not initialized. It should be done by the constructor as product_details_type(NULL, NULL,...)
    Please check .
    Regards
    K.Rajkumar

  • How to fetch from cursor into plsql collection

    Dear Friends,
    I am trying to understand PLSQL collections. I am trying with the following example.
    CREATE OR REPLACE TYPE emp_obj AS OBJECT
    (     empname          VARCHAR2(100),     empjob          VARCHAR2(50),     empsal          NUMBER);
    CREATE OR REPLACE TYPE emp_tbl IS TABLE OF emp_obj;
    CREATE OR REPLACE PACKAGE eg_collection AS
    -- Delcare ref cursor
    TYPE rc IS REF CURSOR;
    -- Procedure
    PROCEDURE eg_collection_proc (out_result OUT rc);
    END;
    CREATE OR REPLACE PACKAGE BODY eg_collection AS
    PROCEDURE eg_collection_proc( out_result OUT rc) AS
    emp_tdt     emp_tbl := emp_tbl(emp_obj('oracle','DBA',100));
    CURSOR c2 IS SELECT ename,job,sal FROM emp WHERE sal > 2000;
    -- Declare a record type to hold the records from cursor and then pass to the collection
    emp_rec emp_obj;
    BEGIN
         OPEN c2;
         LOOP FETCH c1 INTO emp_rec;
              EXIT WHEN c1%NOTFOUND;
              emp_tdt.extend;
    emp_tdt(emp_tdt.count) := emp_rec;
         END LOOP;
         CLOSE c2;
    OPEN out_result FOR SELECT * FROM TABLE(CAST(emp_tdt AS emp_tbl));
    END eg_collection_proc;
    END eg_collection;
    Executing the proc
    variable r refcursor;
    exec eg_collection.eg_collection_proc(:r);
    print r;
    But I am getting compilation error type mismatch found at emp_rec between fetch cursor into variable

    I am trying to understand PLSQL collections. I dont why the code is not working
    SQL> CREATE OR REPLACE TYPE emp_obj AS OBJECT
    2 (
    3      empname          VARCHAR2(100),
    4      empjob          VARCHAR2(50),
    5      empsal          NUMBER
    6 )
    7 /
    Type created.
    SQL> CREATE OR REPLACE TYPE emp_tbl IS TABLE OF emp_obj
    2 /
    Type created.
    SQL> DECLARE
    2      emp_tdt emp_tbl := emp_tbl ();
    3 BEGIN
    4
    5      emp_tdt.extend;
    6      SELECT emp_obj(ename, job, sal) BULK COLLECT INTO emp_tdt
    7      FROM emp WHERE sal < 4000;
    8
    9      DBMS_OUTPUT.PUT_LINE ('The total count is ' || emp_tdt.count);
    10
    11      emp_tdt.extend;
    12      SELECT ename, job, sal INTO emp_tdt(1).empname, emp_tdt(1).empjob, emp_tdt(1).empsal
    13      FROM emp WHERE empno = 7900;
    14
    15      DBMS_OUTPUT.PUT_LINE ('The total count is ' || emp_tdt.count);
    16
    17 END;
    18 /
    The total count is 13
    The total count is 14
    PL/SQL procedure successfully completed.
    SQL> DECLARE
    2      emp_tdt emp_tbl := emp_tbl ();
    3 BEGIN
    4
    5      emp_tdt.extend;
    6      SELECT ename, job, sal INTO emp_tdt(1).empname, emp_tdt(1).empjob, emp_tdt(1).empsal
    7      FROM emp WHERE empno = 7900;
    8
    9      DBMS_OUTPUT.PUT_LINE ('The total count is ' || emp_tdt.count);
    10
    11      emp_tdt.extend;
    12      SELECT emp_obj(ename, job, sal) BULK COLLECT INTO emp_tdt
    13      FROM emp WHERE sal < 4000;
    14
    15      DBMS_OUTPUT.PUT_LINE ('The total count is ' || emp_tdt.count);
    16 END;
    17 /
    DECLARE
    ERROR at line 1:
    ORA-06530: Reference to uninitialized composite
    ORA-06512: at line 6

  • Varray of Object Type

    Hello,
    I am still very new at PL/SQL so please bare with me if you can. I am trying to learn how to store data from an object in a single varray of objects. My code below is attempting to declare an object type with 3 instance attributes and 3 instance methods of getter and setter method.
    Then i want to create a varray type to store an array of "Employee" object types.
    From here i am trying to use a loop to retrieve the first 10 ename, empno, and sal records from the emp table and store them in the variable array of 10 elements.
    Finally, I tried to use another loop to output the ename, empno, and sal in reverse order.
    My object and my object body was created successfully with no errors.
    The problem starts when I begin the anonymous block that creates the varray, this is where i get an error message at the end.
    At the end of my code is the error message i get. Can anyone suggest to me what I am doing wrong, and/or what I can do to achieve this task.
    SET SERVEROUTPUT ON
    --create object
    CREATE OR REPLACE TYPE Employee AS OBJECT(
      ename_obj VARCHAR2(10),
      empno_obj NUMBER(4),
      sal_obj NUMBER(7,2),
      MEMBER FUNCTION getename RETURN VARCHAR2,
      MEMBER FUNCTION getempno RETURN NUMBER,
      MEMBER FUNCTION getsal RETURN NUMBER);
    --create object body
    CREATE OR REPLACE TYPE BODY Employee AS
      MEMBER FUNCTION getename RETURN VARCHAR2 IS
      BEGIN
       RETURN ename_obj;
      END;
      MEMBER FUNCTION getempno RETURN VARCHAR2 IS
      BEGIN
       RETURN empno_obj;
      END;
      MEMBER FUNCTION getsal RETURN VARCHAR2 IS
      BEGIN
       RETURN sal_obj;
      END;
    END;
    --create varray of object and begin line 1 of ERROR Message--
    1> DECLARE
    2> TYPE tvrEmploy IS VARRAY(10) OF Employee;
    3>  vClient    tvrEmploy;
    4>    iCounter   integer:=1;
    5>   CURSOR client_cursor IS
    6>   SELECT ename, sal
    7>    FROM emp
    8>    WHERE rownum < 11;
    9>  BEGIN
    10>    vClient:=tvrEmploy(null,null,null,null,null,null,null,null,null,null) ;
    11>    FOR i IN client_cursor LOOP
    12>       vClient(iCounter).ename_obj:=i.ename;
    13>      vClient(iCounter).empno_obj:=i.empno;
    14>       vClient(iCounter).sal_obj:=i.sal;
    15>       iCounter:=iCounter+1;
    16>    END LOOP;
    17>    FOR I IN REVERSE 1..10 LOOP
    18>        dbms_output.put_line(to_char(I) ||' '|| vClient(I).ename_obj ||' '|| vClient(I).empno_obj ||' '||
              vClient(I).sal_obj);
    19>    END LOOP;
    20> END ;
    21> /
    --ERROR message below--
    DECLARE
    ERROR at line 1:
    ORA-06530: Reference to uninitialized composite
    ORA-06512: at line 12
    Thank you again for your time and patience.
    -Todd

    Hi,
    The error occurs on line 12, the first time through the loop, when you try to execute:
    vClient(iCounter).ename_obj:=i.ename;
    At that point, vClient (1) is not an Employee object; it's NULL.
    Try this:
    DECLARE
        TYPE tvrEmploy IS VARRAY(10) OF Employee;
        vClient    tvrEmploy;
        iCounter   integer := 1;
        CURSOR client_cursor IS
            SELECT  ename, sal
            ,       empno                                                 -- ADDED
       FROM    scott.emp
       WHERE   rownum < 11;
    BEGIN
        vClient := tvrEmploy (null,null,null,null,null,null,null,null,null,null) ;  
        FOR i IN client_cursor LOOP
            vClient (iCounter) := Employee (i.ename, i.empno, i.sal);     -- CHANGED
            iCounter := iCounter + 1;
       END LOOP;
    FOR I IN REVERSE 1..10 LOOP
           dbms_output.put_line(to_char(I) ||' '|| vClient(I).ename_obj ||' '|| vClient(I).empno_obj ||' '||
          vClient(I).sal_obj);
       END LOOP;
    END ;

  • How to initialize a Type Object??

    Hi,
    I have a procedure as below, which has type t_r_rep_data and a table having this type as record, but when I called this procedure, it has ORA-06530 error: Reference to uninitialized composite. Can you tell me how to initialize a type Object?
    Also, is it this the right way to insert a type record into the table, or can I just just INSERT statement?
    Many thanks
    PROCEDURE add_row
    ( in_row_type_ind CHAR,
    in_ordering VARCHAR2
    ,in_record_type VARCHAR2
    ,in_level1_value VARCHAR2
    ,in_level1_description VARCHAR2
    ,in_level2_value VARCHAR2
    ,in_level2_description VARCHAR2
    ,in_level3_value VARCHAR2
    ,in_level3_description VARCHAR2
    ,in_level4_value VARCHAR2
    ,in_level4_description VARCHAR2
    ,in_amount_as_of_date1 NUMBER
    ,in_amount_as_of_date2 NUMBER
    ,io_table IN OUT t_ntr_rep_data
    IS
    l_row_count NUMBER;
    l_row t_r_rep_data;
    BEGIN
    -- ??? not sure where and how to do the initialization bit
    l_row.row_type_ind := NULL;
    l_row.ordering := NULL;
    l_row.record_type := NULL;
    l_row.level1_value := NULL;
    l_row.level1_description := NULL;
    l_row.level2_value := NULL;
    l_row.level2_description := NULL;
    l_row.level3_value := NULL;
    l_row.level3_description := NULL;
    l_row.level4_value := NULL;
    l_row.level4_description := NULL;
    l_row.amount_as_of_date1 := 0;
    l_row.amount_as_of_date2 := 0;
    SELECT COUNT(*)
    INTO l_row_count
    FROM (TABLE(CAST(io_table AS t_ntr_rep_data)));
    l_row.row_type_ind := in_row_type_ind;
    l_row.ordering := in_ordering;
    l_row.record_type := in_record_type;
    l_row.level1_value := in_level1_value;
    l_row.level1_description := in_level1_description;
    l_row.level2_value := in_level2_value;
    l_row.level2_description := in_level2_description;
    l_row.level3_value := in_level3_value;
    l_row.level3_description := in_level3_description;
    l_row.level4_value := in_level4_value;
    l_row.level4_description := in_level4_description;
    l_row.amount_as_of_date1 := in_amount_as_of_date1;
    l_row.amount_as_of_date2 := in_amount_as_of_date2;
    io_table(l_row_count+1) := l_row;
    END;
    --------------------------------------------------

    Simply write a stud which queries the Oracle Dictionary tables which will return Object Type
    Based on the object_name and User_name

  • Populate a REF CURSOR from regular cursor...

    Hi all,
    I apologize if the answer to this is somewhere...I've been looking on the web for sometime and can't find an answer to the following problem. I have a Significant Events database that contains network based issues and problems. As problems are detected on the network an SE is issued and published. As the SE records are updated, NEW records are entered into the table and "linked" back to the original. Each update results in a new row. Thus, an SE with two updates would have a total of 3 lines. When the SE gets closed (set the column CLOSED to SYSDATE), only the "original" SE is closed, any updates are left open...aka, the CLOSED column is left null.
    That said, I need a way to get the original and/or latest updated SE rows from the table. Thus, I am trying to use a PL/SQL package. The PL/SQL "must" return a REF CURSOR as the results are being passed to a client process.
    My initial approach was within a PL/SQL procedure, I have an SQL statement that returns the SE originals. Once in that cursor I need to do the following:
    - Attempt to fetch any linked SE rows.
    - if no rows then
    - add the original to the REF CURSOR.
    - else
    - find latest SE update
    - add latest SE update to REF CURSOR.
    - end if
    My Question is : How do I manually "add" a row to a REF CURSOR?
    If this is not possible, is there a way to populate a REF CURSOR from maybe another construct like:
    TYPE ian_se_record is RECORD (
    se_id number
    ,linked_se_id number
    ,submitted date
    ,updated date
    ,closed date
    ,segroup varchar2(150)
    ,incident_start_time varchar2(150)
    ,business_units_affected varchar2(150)
    ,officenum varchar2(1500)
    ,sedetails varchar2(4000)
    TYPE ian_se_table is table of ian_se_record index by binary_integer;
    With the above construct I could:
    - Fill ian_se_table with the process described above.
    - And finally select off ian_se_table into the REF CURSOR?
    Any help would be greatly appreciated,
    adym

    Hi michaels,
    I've put your solution in place, but can't seem to get it to run. The two types were moved out of the package and into real types as you said. Here's the function, for brevity, I've remove some of the less important code:
    function ian_se_fetch return sys_refcursor
    is
        p_csr_events            sys_refcursor;
        cursor csr_items is
            select
                 se_id
        ...removed for brevity...
        /* END : csr_items  */
        ian_se_row     ian_se_record;
        ian_se_tbl     ian_se_table;
        l_lng_index    number;
        l_lng_linked   number;
        l_lng_id       number;
    begin
         * OPEN : Open the main cursor of originals...
        for the_item in csr_items loop
             * CHECK : Check for any updates to the original...
            l_lng_linked := 0;
            select count(*)
            into l_lng_linked
            from sig_se_t src
            where src.linked_se_id = the_item.se_id;
            l_lng_id := 0;    /* reset the se-id    */
            /* SE original...no linked records yet.    */
            if ( l_lng_linked = 0 ) then
                l_lng_id := the_item.se_id;
            /* SE updates...one or more updates are present.    */
            else
                begin
                    select
                         se_id
                    into l_lng_id
                    from sig_se_t src
                    where src.linked_se_id = the_item.se_id
                      and rownum = 1
                    order by updated desc; /* latest update    */
                exception
                    when too_many_rows then
                        l_lng_id := the_item.se_id;
                    when others then
                        l_lng_id := 0;
                end;
            end if;
            if ( l_lng_id != 0 ) then
                select
                     se_id
                    ,linked_se_id
                    ,submitted
                    ,updated
                    ,closed
                    ,segroup
                    ,incident_start_time
                    ,business_units_affected
                    ,officenum || decode( nvl(impact,'1')
                                      ,'1',''
                                      ,decode(impact
                                          ,'NA', ''
                                          ,':' || impact
                                  )                           impact
                    ,sedetails
                into ian_se_row.se_id
                    ,ian_se_row.linked_se_id
                    ,ian_se_row.submitted
                    ,ian_se_row.updated
                    ,ian_se_row.closed
                    ,ian_se_row.segroup
                    ,ian_se_row.incident_start_time
                    ,ian_se_row.business_units_affected
                    ,ian_se_row.officenum
                    ,ian_se_row.sedetails
                from sig_se_t src
                where src.se_id = l_lng_id;
                l_lng_index := nvl(ian_se_tbl.last,0)+1;
                ian_se_tbl(l_lng_index).se_id                   := ian_se_row.se_id;
                ian_se_tbl(l_lng_index).linked_se_id            := ian_se_row.linked_se_id;
                ian_se_tbl(l_lng_index).submitted               := ian_se_row.submitted;
                ian_se_tbl(l_lng_index).updated                 := ian_se_row.updated;
                ian_se_tbl(l_lng_index).closed                  := ian_se_row.closed;
                ian_se_tbl(l_lng_index).segroup                 := ian_se_row.segroup;
                ian_se_tbl(l_lng_index).incident_start_time     := ian_se_row.incident_start_time;
                ian_se_tbl(l_lng_index).business_units_affected := ian_se_row.business_units_affected;
                ian_se_tbl(l_lng_index).officenum               := ian_se_row.officenum;
                ian_se_tbl(l_lng_index).sedetails               := ian_se_row.sedetails;
            end if;
        end loop;
         * REF CURSOR : Open the ref cursor on the dataset...
        if ( nvl(ian_se_tbl.last,0) = 0 ) then
            p_csr_events := null;
        else
            open p_csr_events for
            select *
            from table (cast ( ian_se_tbl as ian_se_table ));
        end if;
        return p_csr_events;
    end;Here's the test. I keep getting the same error ORA-06530:
    SQL> variable v refcursor;
    SQL> exec :v:=pkg_ian.ian_se_fetch;
    BEGIN :v:=pkg_ian.ian_se_fetch; END;
    ERROR at line 1:
    ORA-06530: Reference to uninitialized composite
    ORA-06512: at "N0002501.PKG_IAN", line 131
    ORA-06512: at line 1
    SQL> print v
    ERROR:
    ORA-24338: statement handle not executedOther things I tried:
    - The ian_se_fetch() function was a procedure using an in out parameter...same error.
    - Wrote a small anonymous block and tried to LOOP/FETCH. Same ORA-06530 error.
    P.S. Line 131 of pkg_ian is the SELECT ... INTO ian_se_row.se_id, ...
    Any help would be greatly appreciated,
    tia,
    adym
    Message was edited by:
    alink

  • Call from Java Plsql Procedure with VArray as Out Parameter

    Hi,
    I have a Java web application(Tomcat server) that call a plsql procedure with Varray as OUT parameter.
    The Plsql code is perfectly compiled.
    When i run the application, I get the following error msg in my Tomcat window:
    java.sql.SQLException: ORA-06530: Reference to uninitialized composite
    ORA-06512: at "SEMS1.PACK_SEMSADMIN_OFFEREDJOBS", line 102
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:109
    3)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStat
    {color:#0000ff}
    Doubt: Do I need to declare ArrayDescriptors to retrieve the VArray from the Plsql procedure.
    I think the below statement is enough; we need ArrayDescriptors only when we we wish to send a Plsql Object or Varray from Java code to the procedure. Plz correct me if not so.
    dbCallableStatement.execute();
    ARRAY SimpleOUTArray = (ARRAY) ((OracleCallableStatement) dbCallableStatement).
    getObject(Integer.parseInt(arlParameterOutIndex.get(i).toString()));{color}
    I am unable to realize where the mistake is?
    {color:#800000}
    {color}{color:#800000}
    VARRAY AND PROC DETAILS:
    TYPE STRUCT_JOB_DETAILS AS OBJECT
    APPL_NO NUMBER (10),
    S_FNAME VARCHAR2 (32 Byte),
    S_MI VARCHAR2 (32 Byte),
    S_LNAME VARCHAR2 (32 Byte),
    APPL_DATE DATE,
    DESCRIPTION VARCHAR2 (100 Byte),
    S_UCID VARCHAR2 (8 Byte)
    TYPE VARRAY_JOB_DETAILS IS VARRAY(100) OF STRUCT_JOB_DETAILS;{color}
    {color:#800000}PROCEDURE:{color}
    {color:#800000}CREATE OR REPLACE PACKAGE PACK_SEMSADMIN_OFFEREDJOBS
    AS
    TYPE Generic_Cursor_Type IS REF CURSOR;
    --TYPE varray_job_detail is VARRAY(100) OF STRUCT_JOB_DETAILS;
    --va_varray_job_detail varray_job_detail := varray_job_detail();
    va_varray_job_detail VARRAY_JOB_DETAILS := VARRAY_JOB_DETAILS();
    PROCEDURE Admin_Jobs_Offered_Rtr
    ic_status IN VARCHAR2,
    or_offered_jobs OUT Generic_Cursor_Type,
    va_varray_job_detail OUT VARRAY_JOB_DETAILS
    CREATE OR REPLACE PACKAGE BODY PACK_SEMSADMIN_OFFEREDJOBS
    AS
    PROCEDURE Admin_Jobs_Offered_Rtr
    ic_status IN VARCHAR2,
    or_offered_jobs OUT Generic_Cursor_Type,
    va_varray_job_detail OUT VARRAY_JOB_DETAILS
    AS
    vc_query VARCHAR2(15000) := '';
    vc_query_1 VARCHAR2(15000) := '';
    counter NUMBER := 1;
    vc_no NUMBER := 0;
    or_applicants_list Generic_Cursor_Type;
    TYPE type_appln_list IS RECORD
    job_no NUMBER(10),
    job_title VARCHAR2(50 BYTE),
    account_no VARCHAR2(10 BYTE),
    head_fname VARCHAR2(32 BYTE),
    head_minitial VARCHAR2(10 BYTE),
    head_lname VARCHAR2(32 BYTE),
    num NUMBER
    vn_appln_list type_appln_list;
    TYPE type_job_offered IS RECORD
    APPL_NO NUMBER (10),
    S_FNAME VARCHAR2 (32),
    S_MI VARCHAR2 (32),
    S_LNAME VARCHAR2 (32),
    APPL_DATE DATE,
    DESCRIPTION VARCHAR2 (100),
    S_UCID VARCHAR2 (8)
    vn_job_offered type_job_offered;
    BEGIN
    vc_query := vc_query || ' SELECT jobs.job_no,job_title, account_no, head_fname, head_minitial, head_lname, num';
    vc_query := vc_query || ' FROM jobs, ( ' ;
    vc_query := vc_query || ' SELECT jobs.job_no,count(*) as num' ;
    vc_query := vc_query || ' FROM student_apps ,jobs ' ;
    vc_query := vc_query || ' WHERE jobs.job_no = student_apps.job_no' ;
    vc_query := vc_query || ' AND (student_apps.status in (''o'',''t'')) '; --|| ic_status || ')' ;
    vc_query := vc_query || ' AND jobs.status not in (''z'', ''Z'')' ;
    vc_query := vc_query || ' GROUP BY jobs.job_no' ;
    vc_query := vc_query || ' ) no_apps_off' ;
    vc_query := vc_query || ' WHERE jobs.job_no = no_apps_off.job_no' ;
    dbms_output.put_line('Executed Query_1');
    va_varray_job_detail := VARRAY_JOB_DETAILS();
    va_varray_job_detail.extend(100);
    OPEN or_offered_jobs FOR vc_query;
    LOOP
    FETCH or_offered_jobs INTO vn_appln_list;
    EXIT WHEN or_offered_jobs%NOTFOUND;
    vc_query_1 := '';
    vc_query_1 := vc_query_1 || ' SELECT stud_apps.appl_no APPL_NO, stud_apps.s_fname S_FNAME, ';
    vc_query_1 := vc_query_1 || ' stud_apps.s_mi S_MI, stud_apps.s_lname S_LNAME, ';
    vc_query_1 := vc_query_1 || ' stud_apps.appl_date APPL_DATE, look_up.description DESCRIPTION, ' ;
    vc_query_1 := vc_query_1 || ' stud_apps.s_ucid S_UCID ' ;
    vc_query_1 := vc_query_1 || ' FROM student_apps stud_apps,jobs jbs,lookup look_up' ;
    vc_query_1 := vc_query_1 || ' WHERE stud_apps.status in (''o'',''t'') '; --(' || ic_status || ') ' ;
    vc_query_1 := vc_query_1 || ' AND jbs.job_no = stud_apps.job_no' ;
    vc_query_1 := vc_query_1 || ' AND jbs.status not in (''z '', ''Z'')' ;
    vc_query_1 := vc_query_1 || ' AND stud_apps.status = look_up.code ' ;
    vc_query_1 := vc_query_1 || ' AND look_up.type = ''st''' ;
    vc_query_1 := vc_query_1 || ' AND stud_apps.job_no = ''' || vn_appln_list.job_no || ''' ' ;
    vc_query_1 := vc_query_1 || ' ORDER BY appl_date' ;
    dbms_output.put_line('Executed Query_2');
    OPEN or_applicants_list FOR vc_query_1;
    LOOP
    FETCH or_applicants_list INTO vn_job_offered;
    EXIT WHEN or_applicants_list%NOTFOUND;
    va_varray_job_detail(counter).APPL_NO := vn_job_offered.APPL_NO;
    va_varray_job_detail(counter).S_FNAME := vn_job_offered.S_FNAME;
    va_varray_job_detail(counter).S_MI := vn_job_offered.S_MI;
    va_varray_job_detail(counter).S_LNAME := vn_job_offered.S_LNAME;
    va_varray_job_detail(counter).APPL_DATE := vn_job_offered.APPL_DATE;
    va_varray_job_detail(counter).DESCRIPTION := vn_job_offered.DESCRIPTION;
    va_varray_job_detail(counter).S_UCID := vn_job_offered.S_UCID;
    counter := counter + 1;
    END LOOP; --end of FOR
    CLOSE or_applicants_list;
    END LOOP; -- end of FETCH
    END Admin_Jobs_Offered_Rtr;
    END PACK_SEMSADMIN_OFFEREDJOBS;
    /{color}
    Reqire help plzzzz !!!
    Thanks.

    Originally posted by JDBC Development Team:
    It's very similar to other datatype except that it uses OracleTypes.ARRAY typecode and the value is mapped to a oracle.sql.ARRAY instance. The code looks as follows --
    cstmt.registerOutParameter (idx, OracleTypes.ARRAY, "VARRAY_TYPE_NAME_HERE");
    cstmt.execute ();
    ARRAY array = (ARRAY) cstmt.getObject (idx);
    Thanks for your reply.
    I have to use:-
    OracleCallableStatement cs1 = (OracleCallableStatement )conn.prepareCall
    ( "{call proj_array(?)}" ) ;
    for retrieving a collection as an OUT parameter.
    This gives me the errors:-
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Blob getBlob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Array getArray(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Clob getClob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Ref getRef(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    How do I get rid of these errors?
    null

  • What is the best way to for a plugin to wrap a video element in a parallel composition with a reference plugin that points to that Video Element?

    I have a basic reference element loaded as a plugin, which is able to retrieve information about, pause and play video elements while displaying its own overlay content as well.  What it's not currently doing, is automatically positioning itself to the same location and dimensions of the video element that it references.  For some reason, when I try using the layout API to set position and size in the video element metadata, this is not retrieved by the reference element (it returns a null value for the target video element's metadata).
    I wanted to try a different approach, specifically, creating a parallel composition that works as follows:
    1) When a video element is created in the factory, it is automatically wrapped in a parallel composition element along with a reference element, which is passed the video element as a target.
    2) The reference element sets its width and height with the width and height properties of the video element spatial trait and will listen for any changes to that width and height to adjust accordingly.
    3) Now that I think about it, the parallel composition should itself be a proxy for the video element, so other code in the player that moves, resizes, or otherwise alters the dispay of the video element, will if fact be adjusting the whole video element + reference element parallel composition.
    In other words, I want the reference element to be an overlay that is "locked" to the surface of any video element and follows it in size, position, display and even audio traits.
    Suggestions for the best way to approach this within the framework?

    Thanks Wei,
    With some more tweaking, I am able to get and use the layout metadata as you said!  Here is where my issue stands now:
    * My IMediaReferrer element can now look at the layout metadata of the target media element and copy those values, so it has the same width, height, x, and y  properties.  This is great!
    * However, particularly for RelativeLayoutFacet metadata, this is only fully useful if both the target media element and my IMediaReferrer element are in the same composition.  If they are in different compositions which are themselves placed differently, then even identical x and y values don't add up to the same position on the screen.
    So, my challenge is to figure out how to ensure that my IMediaReferrer element is placed in the same composition as the target media element.
    Again, the goal is to write a plugin that will have a reference to an underlying video, and will always have the same width, height, x, and y of the video it is overlaying.  This plugin should not require any additional coding in the player, but should take care of setting itself up as above automatically when loaded.
    There isn't any property on a media element which exposes the "parent" composition element that it is a part of, so I don't know how to get my IMediaReferrer to add itself to the same composition as the reference target automatically.  I'm not sure if it's possible to make my IMediaReferrer element extend ParallelElement and still load in a SWF Element as an overlay, and add that SWF Element and the target Media Element as children with identical layout metadata.
    Do you have any suggestions on how I should proceed?
    Thanks again!

Maybe you are looking for

  • CMDKEY Key Mapping Parameter Problem - Please HELP !!!

    Hello ! I try to call a Report from Forms by using a keymap File ! I use IAS Forms and Report 10.1.2 and the Oracle Developer 10.1.2) My Keymap settings are correct The activated Parameters in rwservlet.properties are RELOAD_KEYMAP=YES KEYMAPFILE=CGI

  • Install Oracle 9i on Windows Vista Home Premium

    I have a problem Installing Oracle 9i on Windows Vista Home Premium, I cant install it because it throws me an error message saying that is incompatible with my version of Windows. It is possible to install it with some patch or something?? Message w

  • Transfer quick books from Macbook to Mac mini

    i have quickbooks on my Mac laptop and have recently upgraded to the Mac mini. I want to transfer all the data from laptop to the Mac mini. How?

  • JAVA Error in Application Server After upgrade the Kernal221

    Dear All After we are upgarde the Kernel to 221 we are unable to start the JAVE. But in our setup we are not using java. Error Deatils Thu Nov 26 12:13:21 2009 ***LOG Q0I=> NiIRead: recv (10054: WSAECONNRESET: Connection reset by peer) [nixxi.cpp 442

  • How important is it to layer objects on the page for printing?

    We are using InDesign CS3 on a Windows XP system and then sending to a RIP and then to an older Panther Pro 46 film printer. We have lots of little problems, but one of the issues that happens occasionally, that we can't quite resolve is that for exa