ORA-24381: error(s) in array DML

Hi,
I encountered error during mya testing. The script run thru several cases, until it encouter this error ORA-24381: error(s) in array DML.
What could be the possible reason for this and can anyone give an idea to resolve this issue.
Bulk collect was used with a limit of 1000.
I used dblink to access database.
Thanks in advance.

The documentation tells you all about it: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#sthref2201
Regards,
Rob.

Similar Messages

  • Getting error-ORA-24381: error(s) in array DML

    Hi i have written the following code to bulk insert into a database table.
    I am getting an error while returning the result of the bulk insert query into the collection
    I have tried to track it by using sql%bulk_exceptions.error_code.
    But the error code that it is showing is just 1.
    I trapped it using sqlerrm.
    and that is showing-error(s) in array DML
    What do i do?
    DECLARE
       CURSOR temp_rec_tap_cur
       IS
          SELECT *
            FROM temp_records_tap;
       TYPE temp_rec_tab IS TABLE OF temp_rec_tap_cur%ROWTYPE;
       v_test_tab   temp_rec_tab;
       v_rec_num    num_tab;
       v_filename   temp_records_tap.file_name%TYPE;
       v_error_code tap_reject.error_code%type;
       v_rej_value  tap_reject.field_rej%type;                      
       v_errors number;   
    BEGIN
       SELECT file_name
         INTO v_filename
         FROM table1
         WHERE ROWNUM<2;
       OPEN temp_rec_tap_cur;
       LOOP
          BEGIN
             FETCH temp_rec_tap_cur
             BULK COLLECT INTO v_test_tab LIMIT 1000;
             FORALL i IN v_test_tab.FIRST .. v_test_tab.LAST SAVE EXCEPTIONS
                INSERT INTO tapdetail_tapin
                     VALUES v_test_tab (i)
                  RETURNING record_num
                    BULK COLLECT INTO v_rec_num;
          EXCEPTION
             WHEN DUP_VAL_ON_INDEX
             THEN
                NULL;
             WHEN OTHERS
             THEN
             v_errors:=sql%bulk_exceptions.count;
             for i in 1..v_errors
             loop
             dbms_output.put_line(sql%bulk_exceptions(i).error_code);
             p3_errorlog ('TAPINDETAWARE', SQLERRM, v_filename);     
             end loop;
             END;
                --RAISE;
          EXIT WHEN temp_rec_tap_cur%NOTFOUND;
       END LOOP;
    INSERT INTO table2
    SELECT file_id, file_name, sender_pmn, recipient_pmn, call_date,
                 call_date_only, call_type, call_number, FIRST_RECORD,
                 service_type, service_code, home_bid, serve_bid,
                 chargeable_subs_type, imsi_min, msisdn_mdn, air_charges,
                 air_charges_sdr, air_time, national_call_charges,
                 national_call_charges_sdr, national_call_time,
                 international_call_charges, international_call_charges_sdr,
                 international_call_time, dir_assist_charges,
                 dir_assist_charges_sdr, dir_assist_time, other_charges,
                 other_charges_sdr, other_time, volume_charges,
                 volume_charges_sdr, volume_units, tot_charges, tot_charges_sdr,
                 tot_duration, state_tax, state_tax_sdr, local_tax,
                 local_tax_sdr, state_and_use_tax, state_and_use_tax_sdr, va_tax,
                 va_tax_sdr, other_tax, other_tax_sdr, charge_refund_indicator,
                 advised_charge_currency, advised_charge, advised_charge_sdr,
                 advised_charge_commission, advised_charge_commission_sdr,
                 exchange_rate, mcc, mnc, process_date, chargeable_units,
                 record_num, mscid,null,null,decode(call_type,0,'250',1,'251',5,'255'),null,'Duplicate Call'
                 from temp_records_tap
                 where record_num not in (select column_value from table(v_rec_num)) ;
    EXCEPTION
    WHEN OTHERS THEN
    p3_errorlog ('TAP', SQLERRM, v_filename);  
    END;Edited by: user8731258 on Sep 14, 2010 2:58 AM
    Edited by: user8731258 on Sep 14, 2010 3:01 AM

    What is the type declaration of num_tab and how is record_num defined?
    ORA-24381: error(s) in array DML
    Cause: One or more rows failed in the DML.indicates that you fail on the insert itself. Are the table definitions the same? Same primary/unique keys?
    Edited by: MBr on 14-Sep-2010 03:16

  • ORA-24381: error(s) in array DML - Reasons

    Hi all,
    Do you know when we could recieve this exceptions?
    I found one case - if we deal with FORALL and sparse collection.
    Any other cases?
    Thanks
    PS: We are talking for Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit
    :)

    Do you know when we could recieve this exceptions?e.g. all kind of constraint violations would raise this error:
    SQL> DECLARE
       TYPE emp_tab IS TABLE OF emp%ROWTYPE
          INDEX BY BINARY_INTEGER;
       e_tab   emp_tab;
    BEGIN
       e_tab (1).empno := 7900;
       FORALL i IN 1 .. 1 SAVE EXCEPTIONS
          INSERT INTO emp
               VALUES e_tab (i);
    EXCEPTION
       WHEN OTHERS
       THEN
          DBMS_OUTPUT.put_line (SQLERRM (SQLCODE));
    END;
    ORA-24381: error(s) in array DML
    ORA-00001: unique constraint (PK_EMP) violated

  • I am getting this "ORA-24381: error(s) in array DML error" in the code

    declare
    TYPE RehrCD_TYP IS TABLE OF wk_rehr_entity_hierarchy.wk_rehr_cd%TYPE;
    TYPE RehrParentCD_TYP IS TABLE OF wk_rehr_entity_hierarchy.wk_rehr_parent_cd%TYPE;
    TYPE RehrESSPath_TYP IS TABLE OF wk_rehr_entity_hierarchy.wk_rehr_ess_path%TYPE;
    L_levelRehrCD RehrCD_TYP;
    L_levelParentCD RehrParentCD_TYP;
    L_levelessPath RehrESSPath_TYP;
    L_cItem VARCHAR2(50) := 'PRC_Update_Level :';
    L_rows NUMBER DEFAULT 0;
    CURSOR Update_Level_CUR
         IS
    SELECT
    wk_rehr_cd
    ,wk_rehr_parent_cd
    ,wk_rehr_ess_path
    FROM
    wk_rehr_entity_hierarchy
    WHERE
    wk_rehr_ess_path LIKE '/ENTITY/ACTIVITY_USD%';
    BEGIN
    OPEN Update_Level_CUR;
    BEGIN
    LOOP
    FETCH Update_Level_CUR
    BULK COLLECT INTO
    L_levelRehrCD
    ,L_levelParentCD
    ,L_levelessPath
    LIMIT 10000;
    EXIT WHEN L_levelRehrCD.count = 0;
    dbms_output.put_line(1);
    FORALL i IN L_levelRehrCD.FIRST .. L_levelRehrCD.LAST SAVE EXCEPTIONS
    UPDATE
    wk_rehr_entity_hierarchy
    SET
    wk_rehr_ess_level = RPKG_Entity_Hierarchy.Get_Level(L_levelessPath(i))
    WHERE
    wk_rehr_cd = L_levelRehrCD(i)
    AND wk_rehr_parent_cd = L_levelParentCD(i);
    FOR j IN 1 .. L_levelRehrCD.COUNT
    LOOP
    L_rows := L_rows+ SQL%BULK_ROWCOUNT(j);
    END LOOP;
    END LOOP;
    CLOSE Update_Level_CUR;
    END;
    end;
    Please help me how to debug it?

    Just get rid of the whole looping approach - it's slow, inefficient and you don't need it.
    A single sql statement should always outperform looping code.
    Also, try to bring the logic of RPKG_Entity_Hierarchy.Get_Level inline to the SQL.
    If it's based on the column wk_rehr_ess_path then you might be able to use CONNECT BY or other methods to remove what is a bad practice and classic performance killer.
    I was going to suggest a MERGE statement like this:
    MERGE
    INTO  wk_rehr_entity_hierarchy wk
    USING (SELECT wk_rehr_cd
           ,      wk_rehr_parent_cd
           ,      RPKG_Entity_Hierarchy.Get_Level(wk_rehr_ess_path) lvl
           FROM   wk_rehr_entity_hierarchy
           WHERE  wk_rehr_ess_path LIKE '/ENTITY/ACTIVITY_USD%') xx
    ON    (wk.wk_rehr_cd        = xx.wk_rehr_cd
    AND    wk.wk_rehr_parent_cd = xx.wk_rehr_parent_cd)
    WHEN MATCHED THEN
           UPDATE
           SET    wk_rehr_ess_level = xx.lvl;But then I realised you're selecting from and updating the same table.
    Are you sure this isn't achievable in just a single update?
    UPDATE wk_rehr_entity_hierarchy
    SET    wk_rehr_ess_level = RPKG_Entity_Hierarchy.Get_Level(wk_rehr_ess_path)
    WHERE  wk_rehr_ess_path LIKE '/ENTITY/ACTIVITY_USD%';And then you can bring that function logic inline - much more efficient.

  • Help with ORA 24381

    Hi all,
    I have a stored proecedure where I am supposed to load data into a table from multiple tables.
    I am using BULK COLLECT technique here. My data is loaded alright but in my status monitoring table (which records any errors that might occur) I am getting an entry after the data loads as:
    "ORA-24381: error(s) in array DML."
    Please suggest your inputs on what might be going wrong.
    Thank you.
    Edited by: Chaitanya on Oct 25, 2010 5:28 AM

    What version of Oracle?
    How much data are you trying to load?
    Can you post the code?

  • ORA-01502 error in case of unusable unique index and bulk dml

    Hi, all.
    The db is 11.2.0.3 on a linux machine.
    I made a unique index unusable, and issued a dml on the table.
    Howerver, oracle gave me ORA-01502 error.
    In order to avoid ORA-01502 error, do I have to drop the unique index ,and do bulk dml, and recreate the index?
    Or Is there any other solution without re-creating the unique index?
    create table hoho.abcde as
    select level col1 from dual connect by level <=1000
    10:09:55 HOHO@PD1MGD>create unique index hoho.abcde_dx1 on hoho.abcde (col1);
    Index created.
    10:10:23 HOHO@PD1MGD>alter index hoho.abcde_dx1 unusable;
    Index altered.
    Elapsed: 00:00:00.03
    10:11:27 HOHO@PD1MGD>delete from hoho.abcde where rownum < 11;
    delete from hoho.abcde where rownum < 11
    ERROR at line 1:
    ORA-01502: index 'HOHO.ABCDE_DX1' or partition of such index is in unusable stateThanks in advance.
    Best Regards.

    Hi. all.
    The following is from "http://docs.oracle.com/cd/E14072_01/server.112/e10595/indexes002.htm#CIHJIDJG".
    Is there anyone who can show me a tip to avoid the following without dropping and re-creating an unique index?
    •DML statements terminate with an error if there are any unusable indexes that are used to enforce the UNIQUE constraint.
    Unusable indexes
    An unusable index is ignored by the optimizer and is not maintained by DML. One reason to make an index unusable is if you want to improve the performance of bulk loads. (Bulk loads go more quickly if the database does not need to maintain indexes when inserting rows.) Instead of dropping the index and later recreating it, which requires you to recall the exact parameters of the CREATE INDEX statement, you can make the index unusable, and then just rebuild it. You can create an index in the unusable state, or you can mark an existing index or index partition unusable. The database may mark an index unusable under certain circumstances, such as when there is a failure while building the index. When one partition of a partitioned index is marked unusable, the other partitions of the index remain valid.
    An unusable index or index partition must be rebuilt, or dropped and re-created, before it can be used. Truncating a table makes an unusable index valid.
    Beginning with Oracle Database 11g Release 2, when you make an existing index unusable, its index segment is dropped.
    The functionality of unusable indexes depends on the setting of the SKIP_UNUSABLE_INDEXES initialization parameter.
    When SKIP_UNUSABLE_INDEXES is TRUE (the default), then:
    •DML statements against the table proceed, but unusable indexes are not maintained.
    •DML statements terminate with an error if there are any unusable indexes that are used to enforce the UNIQUE constraint.
    •For non-partitioned indexes, the optimizer does not consider any unusable indexes when creating an access plan for SELECT statements. The only exception is when an index is explicitly specified with the INDEX() hint.
    •For a partitioned index where one or more of the partitions are unusable, the optimizer does not consider the index if it cannot determine at query compilation time if any of the index partitions can be pruned. This is true for both partitioned and non-partitioned tables. The only exception is when an index is explicitly specified with the INDEX() hint.
    When SKIP_UNUSABLE_INDEXES is FALSE, then:
    •If any unusable indexes or index partitions are present, any DML statements that would cause those indexes or index partitions to be updated are terminated with an error.
    •For SELECT statements, if an unusable index or unusable index partition is present but the optimizer does not choose to use it for the access plan, the statement proceeds. However, if the optimizer does choose to use the unusable index or unusable index partition, the statement terminates with an error.Thanks in advance.
    Best Regards.

  • ORA-20505: Error in DML - Version of data in db has changed

    Hello,
    Application Express 3.1.0.00.32
    I have created a Report and Master Detail in the Sample Application on oracle.application.com. I am receiving an error on my Master Detail Form when clicking the <Previous and Next> buttons. I have viewed other issues like this in the forum but, it looks like everyone is a little different. Can anyone assist me with this error when browsing to the next record(s). Thanks in advance.
    ORA-20505: Error in DML: p_rowid=6, p_alt_rowid=CUSTOMER_ID, p_rowid2=, p_alt_rowid2=. ORA-20503: Current version of data in database has changed since user initiated update process. current checksum = "E9A08EDC02A82871E6865DB254B09ED2" application checksum = "39454529513F24BE60C167752BF71750"
    I created another Master Detail page and I do not have any errors when scrolling using <> buttons. Here is a process that may be causing my error using the original Master Detail page.
    DECLARE
    CUSTOMER_ID VARCHAR(20);
    BEGIN
    SELECT CUSTOMER_ID INTO :P21_CUSTOMER_ID
    FROM DEMO_CUSTOMERS
    WHERE CUST_FIRST_NAME = :P21_CUST_FIRST_NAME;
    -- processing here
    EXCEPTION
      -- Catches all 'no data found' errors
       WHEN NO_DATA_FOUND THEN
         DBMS_OUTPUT.PUT_LINE
           ('No Data found for SEARCH on ' || CUSTOMER_ID);
    END;Edited by: Charles A on Apr 30, 2009 11:40 AM

    Hi Charles,
    I've had a look at your page 21.
    The problem was that the "Fetch Values 2" process was not conditional and was running in the "On Load - Before Header" process point. This meant that it was being run every time the page was being loaded. This process checks for the CUSTOMER_ID relating to the value in P21_CUST_FIRST_NAME which, because the "Fetch Row..." process hasn't been run at that point (it runs "On Load - After Header"), will always return the same CUSTOMER_ID value from when the page was first loaded. The Next/Previous buttons, however, moved the P21_CUSTOMER_ID forward/back one value (this became apparent when this field was changed from "Hidden and Protected" to "Text"). As a result, the data on the page was for "Albert" but the CUSTOMER_ID value was for whatever record was next/previous to the Albert one. Thus, moving next/previous always caused a mix of the actual data.
    I have changed the "Fetch Values 2" process to be conditional on P21_CUSTOMER_ID being NULL. This way, the CUSTOMER_ID value is ONLY found by code when the page is first loaded. Thereafter, it is controlled by the Next/Previous functionality.
    Andy

  • What are right parameter types of ODCIIndexInsert in case of creating indextype WITH ARRAY DML option (documentation mismatch)

    Hello.
    During developing Domain Index for Oracle 11.2.0.1.0 (problem also appears in 12с) i was faced with misunderstanding of parameter types of function
    ODCIIndexInsert in case of creating indextype  WITH ARRAY DML option
    According to Oracle documentation
    http://docs.oracle.com/cd/E11882_01/appdev.112/e10765/ext_idx_ref.htm#i76892
    In case of  WITH ARRAY DML option Oracle will invoke ODCIIndexInsert with following signature
    FUNCTION ODCIIndexInsert(
      ia ODCIIndexInfo,
      ridlist ODCIRidList,
      newvallist varray_of_column_type,
      env ODCIEnv)
    RETURN NUMBER
    In my case indexed column has datatype NUMBER so i defined varray_of_column_type as SYS.ODCINumberList
    STATIC FUNCTION ODCIIndexInsert(ia in sys.ODCIIndexInfo, ridlist in sys.ODCIRidList,  newvallist in sys.ODCINumberList, env in SYS.ODCIEnv) RETURN NUMBER
    Indextype was created as
    CREATE INDEXTYPE test_index_type
    FOR
    test_eq(number, number)
    USING index_methods
    WITH ARRAY DML(number, sys.ODCINumberList)
    WITH LOCAL RANGE PARTITION
    WITH SYSTEM MANAGED STORAGE TABLES;
    or
    CREATE INDEXTYPE test_index_type
    FOR
    test_eq(number, number)
    USING index_methods
    WITH ARRAY DML
    WITH LOCAL RANGE PARTITION
    WITH SYSTEM MANAGED STORAGE TABLES;
    (problem occurs in all cases)
    CREATE TABLE test_table (id NUMBER (19,0));
    CREATE INDEX test_index ON test_table(id) INDEXTYPE IS test_index_type;
    When attempting to insert data in the table
    insert into test_table values (1);
    oracle raise exception
    Error starting at line 53 in command:
    insert into test_table values (1)
    Error at Command Line:53 Column:1
    Error report:
    SQL Error: ORA-29925: cannot execute SCOTT.INDEX_METHODS.ODCIINDEXINSERT
    ORA-06553: PLS-306: wrong number or types of arguments in call to 'ODCIINDEXINSERT'
    ORA-06553: PLS-306: wrong number or types of arguments in call to 'ODCIINDEXINSERT'
    29925. 00000 -  "cannot execute %s"
    *Cause:    The specified function does not exist or does not have an
               appropriate signature.
    *Action:   Implement the function with the appropriate signature.
    So my question is.
    Is it normal behavior  of oracle (according to documentation)?
    What is correct signature of ODCIIndexInsert function in case of INDEXTYPE creation with 'WITH ARRAY DML' option and fact that indexed column has NUMBER datatype?
    By the way if i define indextype without 'WITH ARRAY DML' option signature is clear, and working. But this approach doesn't satisfies our performance needs.
    Also if i define index type with option 'WITH ARRAY DML WITHOUT COLUMN DATA' and use signature
    static function ODCIIndexInsert(ia sys.odciindexinfo,   ridlist sys.odciridlist, env sys.ODCIEnv) return number
    Everything works too. But this approach doesn't satisfies our business needs.
    Is it a way to define ODCIIndexInsert  parameter types (in case of indexing number column)  so that batch inserting works according to documentation ?
    FUNCTION ODCIIndexInsert(
          ia ODCIIndexInfo,
          ridlist ODCIRidList,
          newvallist varray_of_column_type,
          env ODCIEnv)
    I am attaching full sql script to recreate environment and reproduce the problem.
    Type definition:
    CREATE OR REPLACE TYPE index_methods AS OBJECT
      step number,
      STATIC FUNCTION ODCIGetInterfaces(ifclist OUT SYS.ODCIObjectList) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexCreate (ia SYS.ODCIIndexInfo, parms VARCHAR2, env SYS.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexAlter (ia sys.ODCIIndexInfo, parms IN OUT VARCHAR2, altopt number, env sys.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexDrop(ia SYS.ODCIIndexInfo, env SYS.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexExchangePartition(ia SYS.ODCIIndexInfo, ia1 SYS.ODCIIndexInfo, env SYS.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexUpdPartMetadata(ia sys.ODCIIndexInfo, palist sys.ODCIPartInfoList, env sys.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexInsert(ia in sys.ODCIIndexInfo, ridlist in sys.ODCIRidList,  newvallist in sys.ODCINumberList, env in SYS.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexDelete(ia SYS.ODCIIndexInfo, rid VARCHAR2, oldval number, env SYS.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexUpdate(ia SYS.ODCIIndexInfo, rid VARCHAR2, oldval number, newval number, env SYS.ODCIEnv) RETURN NUMBER,
      STATIC FUNCTION ODCIIndexStart(sctx IN OUT index_methods, ia SYS.ODCIIndexInfo,
        op SYS.ODCIPredInfo, qi sys.ODCIQueryInfo, strt number, stop number, cmpval number, env SYS.ODCIEnv) RETURN NUMBER,
      MEMBER FUNCTION ODCIIndexFetch(self IN OUT index_methods, nrows NUMBER, rids OUT SYS.ODCIridlist, env SYS.ODCIEnv) RETURN NUMBER,
      MEMBER FUNCTION ODCIIndexClose(self IN index_methods, env SYS.ODCIEnv) RETURN NUMBER
    CREATE OR REPLACE TYPE BODY index_methods IS
    STATIC FUNCTION ODCIGetInterfaces(ifclist OUT sys.ODCIObjectList) RETURN NUMBER IS
    BEGIN
      ifclist := sys.ODCIObjectList(sys.ODCIObject('SYS','ODCIINDEX2'));
      RETURN ODCIConst.Success;
    END ODCIGetInterfaces;
    STATIC FUNCTION ODCIIndexCreate (ia sys.ODCIIndexInfo, parms VARCHAR2,  env sys.ODCIEnv) RETURN NUMBER IS
    BEGIN
      RETURN ODCIConst.Success;
    END ODCIIndexCreate;
    STATIC FUNCTION ODCIIndexDrop(ia sys.ODCIIndexInfo, env sys.ODCIEnv) RETURN NUMBER IS
    BEGIN
      RETURN ODCIConst.Success;
    END ODCIIndexDrop;
    STATIC FUNCTION ODCIIndexAlter (
      ia sys.ODCIIndexInfo,
      parms IN OUT VARCHAR2,
      altopt NUMBER,
      env sys.ODCIEnv)
    RETURN NUMBER IS
    BEGIN
      RETURN ODCIConst.Success;
    END ODCIIndexAlter;
    STATIC FUNCTION ODCIIndexUpdPartMetadata(
      ia sys.ODCIIndexInfo,
      palist sys.ODCIPartInfoList,
      env sys.ODCIEnv)
    RETURN NUMBER IS
    BEGIN
      RETURN ODCIConst.Success;
    END ODCIIndexUpdPartMetadata;
    STATIC FUNCTION ODCIIndexExchangePartition(
      ia sys.ODCIIndexInfo,
      ia1 sys.ODCIIndexInfo,
      env sys.ODCIEnv)
    RETURN NUMBER IS
    BEGIN
      RETURN ODCIConst.Success;
    END ODCIIndexExchangePartition;
    STATIC FUNCTION ODCIIndexInsert(
       ia sys.ODCIIndexInfo,
       ridlist sys.ODCIRidList,
       newvallist sys.ODCINumberList,
       env sys.ODCIEnv)
    RETURN NUMBER IS
    BEGIN
      return ODCIConst.Success;
    END;
    STATIC FUNCTION ODCIIndexDelete(
       ia SYS.ODCIIndexInfo,
       rid VARCHAR2,
       oldval number,
       env SYS.ODCIEnv)
    RETURN NUMBER IS
    BEGIN
      return ODCIConst.Success;
    END;
    STATIC FUNCTION ODCIIndexUpdate(
       ia SYS.ODCIIndexInfo,
       rid VARCHAR2,
       oldval number,
       newval number,
       env SYS.ODCIEnv)
    RETURN NUMBER AS
    BEGIN
      return ODCIConst.Success;
    END;
    STATIC FUNCTION ODCIIndexStart(
      sctx IN OUT index_methods,
      ia SYS.ODCIIndexInfo,
      op SYS.ODCIPredInfo,
      qi sys.ODCIQueryInfo,
      strt number,
      stop number,
      cmpval  number,
      env SYS.ODCIEnv)
    RETURN NUMBER AS
    BEGIN
      sctx := index_methods(1);
      return ODCIConst.Success;
    END;
    MEMBER FUNCTION ODCIIndexFetch(
      self IN OUT index_methods,
      nrows NUMBER,
      rids OUT SYS.ODCIridlist,
      env SYS.ODCIEnv)
    RETURN NUMBER AS
    BEGIN
      return ODCIConst.Success;
    END;
    MEMBER FUNCTION ODCIIndexClose(self IN index_methods, env SYS.ODCIEnv) RETURN NUMBER AS
    BEGIN
      return ODCIConst.Success;
    END;
    end;
    Problem workaround:
    --drop function test_eq_fun;
    CREATE FUNCTION test_eq_fun(a number, b number) RETURN NUMBER AS
    BEGIN
      IF a = b then
        RETURN 1;
      ELSE
        RETURN 0;
      END IF;
    END;
    --drop operator test_eq;
    CREATE OPERATOR test_eq
    BINDING (number, number) RETURN NUMBER
    USING test_eq_fun;
    --drop indextype test_index_type;
    CREATE INDEXTYPE test_index_type
    FOR
    test_eq(number, number)
    USING index_methods
    WITH ARRAY DML(number, sys.ODCINumberList)
    WITH LOCAL RANGE PARTITION
    WITH SYSTEM MANAGED STORAGE TABLES;
    CREATE INDEXTYPE test_index_type
    FOR
    test_eq(number, number)
    USING index_methods
    WITH ARRAY DML
    WITH LOCAL RANGE PARTITION
    WITH SYSTEM MANAGED STORAGE TABLES;
    --drop table test_table;
    CREATE TABLE test_table (id NUMBER (19,0));
    CREATE INDEX test_index ON test_table(id) INDEXTYPE IS test_index_type;
    insert into test_table values (1);

    I get single for 1 row and batch for 2 or more rows in the following simplified simulation.
    SCOTT@orcl12c> DESC SYS.ODCINUMBERLIST
    SYS.ODCINUMBERLIST VARRAY(32767) OF NUMBER
    SCOTT@orcl12c> CREATE OR REPLACE TYPE index_methods AS OBJECT
      2  (
      3    step number,
      4    STATIC FUNCTION ODCIGetInterfaces(ifclist OUT SYS.ODCIObjectList) RETURN NUMBER,
      5    STATIC FUNCTION ODCIIndexCreate (ia SYS.ODCIIndexInfo, parms VARCHAR2, env SYS.ODCIEnv) RETURN NUMBER,
      6    STATIC FUNCTION ODCIIndexAlter (ia sys.ODCIIndexInfo, parms IN OUT VARCHAR2, altopt number, env sys.ODCIEnv) RETURN NUMBER,
      7    STATIC FUNCTION ODCIIndexDrop(ia SYS.ODCIIndexInfo, env SYS.ODCIEnv) RETURN NUMBER,
      8    STATIC FUNCTION ODCIIndexExchangePartition(ia SYS.ODCIIndexInfo, ia1 SYS.ODCIIndexInfo, env SYS.ODCIEnv) RETURN NUMBER,
      9    STATIC FUNCTION ODCIIndexUpdPartMetadata(ia sys.ODCIIndexInfo, palist sys.ODCIPartInfoList, env sys.ODCIEnv) RETURN NUMBER,
    10    STATIC FUNCTION ODCIIndexInsert(ia in sys.ODCIIndexInfo, rid in VARCHAR2,  newval in NUMBER, env in SYS.ODCIEnv) RETURN NUMBER,
    11    STATIC FUNCTION ODCIIndexInsert(ia in sys.ODCIIndexInfo, ridlist in sys.ODCIRidList,  newvallist in your_type, env in SYS.ODCIEnv) RETURN NUMBER,
    12    STATIC FUNCTION ODCIIndexDelete(ia SYS.ODCIIndexInfo, rid VARCHAR2, oldval number, env SYS.ODCIEnv) RETURN NUMBER,
    13    STATIC FUNCTION ODCIIndexUpdate(ia SYS.ODCIIndexInfo, rid VARCHAR2, oldval number, newval number, env SYS.ODCIEnv) RETURN NUMBER,
    14    STATIC FUNCTION ODCIIndexStart(sctx IN OUT index_methods, ia SYS.ODCIIndexInfo,
    15       op SYS.ODCIPredInfo, qi sys.ODCIQueryInfo, strt number, stop number, cmpval number, env SYS.ODCIEnv) RETURN NUMBER,
    16    MEMBER FUNCTION ODCIIndexFetch(self IN OUT index_methods, nrows NUMBER, rids OUT SYS.ODCIridlist, env SYS.ODCIEnv) RETURN NUMBER,
    17    MEMBER FUNCTION ODCIIndexClose(self IN index_methods, env SYS.ODCIEnv) RETURN NUMBER
    18  );
    19  /
    Type created.
    SCOTT@orcl12c> CREATE OR REPLACE TYPE BODY index_methods IS
      2  STATIC FUNCTION ODCIGetInterfaces(ifclist OUT sys.ODCIObjectList) RETURN NUMBER IS
      3  BEGIN
      4    ifclist := sys.ODCIObjectList(sys.ODCIObject('SYS','ODCIINDEX2'));
      5    RETURN ODCIConst.Success;
      6  END ODCIGetInterfaces;
      7
      8  STATIC FUNCTION ODCIIndexCreate (ia sys.ODCIIndexInfo, parms VARCHAR2,  env sys.ODCIEnv) RETURN NUMBER IS
      9  BEGIN
    10    RETURN ODCIConst.Success;
    11  END ODCIIndexCreate;
    12
    13  STATIC FUNCTION ODCIIndexDrop(ia sys.ODCIIndexInfo, env sys.ODCIEnv) RETURN NUMBER IS
    14  BEGIN
    15    RETURN ODCIConst.Success;
    16  END ODCIIndexDrop;
    17
    18  STATIC FUNCTION ODCIIndexAlter (
    19    ia sys.ODCIIndexInfo,
    20    parms IN OUT VARCHAR2,
    21    altopt NUMBER,
    22    env sys.ODCIEnv)
    23  RETURN NUMBER IS
    24  BEGIN
    25    RETURN ODCIConst.Success;
    26  END ODCIIndexAlter;
    27
    28  STATIC FUNCTION ODCIIndexUpdPartMetadata(
    29    ia sys.ODCIIndexInfo,
    30    palist sys.ODCIPartInfoList,
    31    env sys.ODCIEnv)
    32  RETURN NUMBER IS
    33  BEGIN
    34    RETURN ODCIConst.Success;
    35  END ODCIIndexUpdPartMetadata;
    36
    37  STATIC FUNCTION ODCIIndexExchangePartition(
    38    ia sys.ODCIIndexInfo,
    39    ia1 sys.ODCIIndexInfo,
    40    env sys.ODCIEnv)
    41  RETURN NUMBER IS
    42  BEGIN
    43    RETURN ODCIConst.Success;
    44  END ODCIIndexExchangePartition;
    45
    46  STATIC FUNCTION ODCIIndexInsert(
    47      ia sys.ODCIIndexInfo,
    48      rid VARCHAR2,
    49      newval NUMBER,
    50      env sys.ODCIEnv)
    51  RETURN NUMBER IS
    52  BEGIN
    53    dbms_output.put_line ('single');
    54    return ODCIConst.Success;
    55  END;
    56
    57  STATIC FUNCTION ODCIIndexInsert(
    58      ia sys.ODCIIndexInfo,
    59      ridlist sys.ODCIRidList,
    60      newvallist your_type,
    61      env sys.ODCIEnv)
    62  RETURN NUMBER IS
    63  BEGIN
    64    dbms_output.put_line ('batch');
    65    return ODCIConst.Success;
    66  END;
    67
    68  STATIC FUNCTION ODCIIndexDelete(
    69      ia SYS.ODCIIndexInfo,
    70      rid VARCHAR2,
    71      oldval number,
    72      env SYS.ODCIEnv)
    73  RETURN NUMBER IS
    74  BEGIN
    75    return ODCIConst.Success;
    76  END;
    77
    78  STATIC FUNCTION ODCIIndexUpdate(
    79      ia SYS.ODCIIndexInfo,
    80      rid VARCHAR2,
    81      oldval number,
    82      newval number,
    83      env SYS.ODCIEnv)
    84  RETURN NUMBER AS
    85  BEGIN
    86    return ODCIConst.Success;
    87  END;
    88
    89  STATIC FUNCTION ODCIIndexStart(
    90    sctx IN OUT index_methods,
    91    ia SYS.ODCIIndexInfo,
    92    op SYS.ODCIPredInfo,
    93    qi sys.ODCIQueryInfo,
    94    strt number,
    95    stop number,
    96    cmpval  number,
    97    env SYS.ODCIEnv)
    98  RETURN NUMBER AS
    99  BEGIN
    100    sctx := index_methods(1);
    101    return ODCIConst.Success;
    102  END;
    103
    104  MEMBER FUNCTION ODCIIndexFetch(
    105    self IN OUT index_methods,
    106    nrows NUMBER,
    107    rids OUT SYS.ODCIridlist,
    108    env SYS.ODCIEnv)
    109  RETURN NUMBER AS
    110  BEGIN
    111    return ODCIConst.Success;
    112  END;
    113
    114  MEMBER FUNCTION ODCIIndexClose(self IN index_methods, env SYS.ODCIEnv) RETURN NUMBER AS
    115  BEGIN
    116    return ODCIConst.Success;
    117  END;
    118  end;
    119  /
    Type body created.
    SCOTT@orcl12c> CREATE FUNCTION test_eq_fun(a number, b number) RETURN NUMBER AS
      2  BEGIN
      3    IF a = b then
      4       RETURN 1;
      5    ELSE
      6       RETURN 0;
      7    END IF;
      8  END;
      9  /
    Function created.
    SCOTT@orcl12c> CREATE OPERATOR test_eq
      2  BINDING (number, number) RETURN NUMBER
      3  USING test_eq_fun
      4  /
    Operator created.
    SCOTT@orcl12c> CREATE INDEXTYPE test_index_type
      2  FOR
      3  test_eq(number, number)
      4  USING index_methods
      5  WITH ARRAY DML(number, your_type)
      6  WITH LOCAL RANGE PARTITION
      7  WITH SYSTEM MANAGED STORAGE TABLES
      8  /
    Indextype created.
    SCOTT@orcl12c> CREATE TABLE test_table (id NUMBER (19,0))
      2  /
    Table created.
    SCOTT@orcl12c> CREATE INDEX test_index ON test_table(id) INDEXTYPE IS test_index_type
      2  /
    Index created.
    SCOTT@orcl12c> insert into test_table values (1)
      2  /
    single
    1 row created.
    SCOTT@orcl12c> insert into test_table
      2  select 2 from dual union all
      3  select 3 from dual
      4  /
    batch
    2 rows created.
    SCOTT@orcl12c> insert into test_table select deptno from dept
      2  /
    batch
    4 rows created.
    SCOTT@orcl12c> insert into test_table select object_id from user_objects
      2  /
    batch
    34 rows created.
    SCOTT@orcl12c>

  • ORA-01400 error on a mandatory column with Default value

    Hi,
    I have got a mapping, which is loading from one view to a target table. In the target table there is a column which is marked as "NOT NULL" also has got Default value. But my mapping is failing with ORA-01400 error.
    Could you please guide me which setting in the mapping will make it load the default value in the target column?
    Regards,
    Samujjwal Basu

    I should add - I guess I can always put my own custom process in to replace the DML. Just seems like a simple thing - if the value doesn't appear on the debug, isn't set with any default value... don't include it in the DML.

  • JBO-26030 and ORA-00054 error when updating a certain row

    I have a page that saves data when you leave a cell in a table. Everything seems to work fine, but when you get to some cells the JBO-26030 error pops up and then no matter what you do you can't ever save anything on that cell. You can close everything down and reopen and change other cells, but when you go back to that cell the error message always pops up. I think it's mainly happening on the cell that is a drop down with 3 values (P, F, and NT). P is the value and key for the drop down.
    Then when I go into the database through Toad I try to change the value just so see what happens and that's when I get the ORA-00054: resource busy and acquire with NOWAIT specified error. This again only happens when editing that row.
    Any help is appreciated...Thanks!
    Edited by: user10942416 on Aug 6, 2009 6:16 AM

    This error is caused when the block property 'DML returning values' equals YES. This property was introduced as of forms 6. What does it do ? As per the on-line help of Forms, "A database update or insert action may initiate server-side triggers that cause alterations or additional changes in the data. In Release 6, when using an Oracle8 database server, Forms uses the DML Returning clause to immediately bring back any such changes. When this property is set to Yes, Forms will automatically update the client-side version of the data, and the user will not need to re-query the database to obtain the changed values". When this property is switched to yes the generated insert/update statement will contain the 'returning clause' and this clause is causing the error.
    As far as I have tested, the only way at present, to get rid of this error is to set 'DML returing values' to NO. So, not to use this functionality.
    See also:
    http://support.oracle.co.uk/metalink/plsql/ml2_documents.showFrameDocument?p_database_id=NOT&p_id=143395.1
    Please respond if this solution works for you.
    Greets,
    Guido Zeelen

  • ORA-302000 Error On client_text_io.fopen()

    i am using a webutil library - client_text_io.fopen() on the form that was compiled on 10.1.2.3 version and this webutil_file.file_selection_dialog() built-in package. the webutil_file.file_selection_dialog() works but not the client_text_io.fopen(). when the form is run on the application server it is getting this error ORA-302000.
    PROCEDURE prc_load_proj_alloc_data IS
      vFilename             VARCHAR2(100) := :control.drv_filename;
      vInputFile             client_text_io.FILE_TYPE;
      vLinebuf               VARCHAR2(2000);
      vCommaPosition     NUMBER := 0;
      TYPE                array_type IS VARRAY(10) OF VARCHAR2(100);
      vColumn            array_type := array_type('');
      vCtr                  BINARY_INTEGER := 1;
      vRowCtr            number := 0;
      vLineLoadCnt     number := 0;
    begin
      -- cursor must be placed on the block
      go_block('MRC_PROJ_ALLOC_INTERFACE');
      go_item('MRC_PROJ_ALLOC_INTERFACE.ATTRIBUTE1'); 
      --extend and initialize the array to 9 columns
      vColumn.EXTEND(9,1);
      -- open the file for reading
      begin
        vInputFile := client_text_io.fopen(vFilename,'r');
      exception
           when others then
             alertme('note','SQLCODE '||SQLCODE);
             if SQLCODE = -302000 then
                  alertme('note',errtyp||'-'||TO_CHAR(errnum)||': '||errtxt);
            loop
              alertme('note',TO_CHAR(TOOL_ERR.CODE) || ': ' || TOOL_ERR.MESSAGE);
              TOOL_ERR.POP;
              exit when TOOL_ERR.NERRORS = 0;
            end loop;
          end if;
      end;
    end;
        the file that i am trying to read is in csv format and is not currently in use. i tried any other file from my local C:\ or D:\ drive and i am getting the same error. what could possiblly that i am missing? thanks.

    we figured it out that the cause of issue was that the webutil.plx was on our application executable directory. basically we have the webutil.plx on a common directory applicable to other application and when we removed the webutil.plx on our application directory the ORA-302000 error was solved.

  • Oracle 8i array DML operations with LOB objects

    Hi all,
    I have a question about Oracle 8i array DML operations with LOB objects, both CLOB and BLOB. With the following statement in mind:
    INSERT INTO TABLEX (COL1, COL2) VALUES (:1, :2)
    where COL1 is a NUMBER and COL2 is a BLOB, I want to use OCIs array DML functionality to insert multiple records with a single statement execution. I have allocated an array of LOB locators, initialized them with OCIDescriptorAlloc(), and bound them to COL2 where mode is set to OCI_DATA_AT_EXEC and dty (IN) is set to SQLT_BLOB. It is after this where I am getting confused.
    To send the LOB data, I have tried using the user-defined callback method, registering the callback function via OCIBindDynamic(). I initialize icbfps arguments as I would if I were dealing with RAW/LONG RAW data. When execution passes from the callback function, I encounter a memory exception within an Oracle dll. Where dvoid **indpp equals 0 and the object is of type RAW/LONG RAW, the function works fine. Is this not a valid methodology for CLOB/BLOB objects?
    Next, I tried performing piecewise INSERTs using OCIStmtGetPieceInfo() and OCIStmtSetPieceInfo(). When using this method, I use OCILobWrite() along with a user-defined callback designed for LOBs to send LOB data to the database. Here everything works fine until I exit the user-defined LOB write callback function where an OCI_INVALID_HANDLE error is encountered. I understand that both OCILobWrite() and OCIStmtExecute() return OCI_NEED_DATA. And it does seem to me that the two statements work separately rather than in conjunction with each other. So I rather doubt this is the proper methodology.
    As you can see, the correct method has evaded me. I have looked through the OCI LOB samples, but have not found any code that helps answer my question. Oracles OCI documentation has not been of much help either. So if anyone could offer some insight I would greatly appreciate it.
    Chris Simms
    [email protected]
    null

    Before 9i, you will have to first insert empty locators using EMPTY_CLOB() inlined in the SQL and using RETURNING clause to return the locator. Then use OCILobWrite to write to the locators in a streamed fashion.
    From 9i, you can actually bind a long buffer to each lob position without first inserting an empty locator, retrieving it and then writing to it.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">quote:</font><HR>Originally posted by CSimms:
    Hi all,
    I have a question about Oracle 8i array DML operations with LOB objects, both CLOB and BLOB. With the following statement in mind:
    INSERT INTO TABLEX (COL1, COL2) VALUES (:1, :2)
    where COL1 is a NUMBER and COL2 is a BLOB, I want to use OCIs array DML functionality to insert multiple records with a single statement execution. I have allocated an array of LOB locators, initialized them with OCIDescriptorAlloc(), and bound them to COL2 where mode is set to OCI_DATA_AT_EXEC and dty (IN) is set to SQLT_BLOB. It is after this where I am getting confused.
    To send the LOB data, I have tried using the user-defined callback method, registering the callback function via OCIBindDynamic(). I initialize icbfps arguments as I would if I were dealing with RAW/LONG RAW data. When execution passes from the callback function, I encounter a memory exception within an Oracle dll. Where dvoid **indpp equals 0 and the object is of type RAW/LONG RAW, the function works fine. Is this not a valid methodology for CLOB/BLOB objects?
    Next, I tried performing piecewise INSERTs using OCIStmtGetPieceInfo() and OCIStmtSetPieceInfo(). When using this method, I use OCILobWrite() along with a user-defined callback designed for LOBs to send LOB data to the database. Here everything works fine until I exit the user-defined LOB write callback function where an OCI_INVALID_HANDLE error is encountered. I understand that both OCILobWrite() and OCIStmtExecute() return OCI_NEED_DATA. And it does seem to me that the two statements work separately rather than in conjunction with each other. So I rather doubt this is the proper methodology.
    As you can see, the correct method has evaded me. I have looked through the OCI LOB samples, but have not found any code that helps answer my question. Oracles OCI documentation has not been of much help either. So if anyone could offer some insight I would greatly appreciate it.
    Chris Simms
    [email protected]
    <HR></BLOCKQUOTE>
    null

  • ORA-02032 Error

    Hi all,
    I have an oracle 9.2.0.8 running on red hat 4 64 bits.
    Since today we are facing the following problem: We run the following statement:
    INSERT INTO xxxxxxxxxxx (xxxxx_id,xxxxxxx2,xxxxxxx3) VALUES (1,67592740,75310510)
    but we get the folling error:
    ORA-02032: clustered tables cannot be used before the cluster index is built
    ORA-06512: at "OWNER.CCC_INS_TRG", line 7
    ORA-04088: error during execution of trigger 'OWNER.CCC_INS_TRG'
    Any suggestions?
    Thanks in advance.

    02032, 00000, "clustered tables cannot be used before the cluster index is built"
    // *Cause: User attempted to perform a DML statement on a clustered table
    //       for which no cluster index has yet been created.
    // *Action:  Create the cluster index.

  • ORA-20001: Error

    hi all,
    I have a problem when I try to delete or a save in my my form I am getting this error.
    ORA-20001: Error in DML: p_rowid=52, p_alt_rowid=MSB_ID, p_rowid2=, p_alt_rowid2=. ORA-20001: Current version of data in database has changed since user initiated update process. current checksum = "310B7C5EFC6B9299BC7CB7DB500A2E84" application checksum = "0"
    what can be the problem?
    Thanks.

    1. Please tell us your first name and put it in your handle and/or profile to help us.
    2. Explain all the details of your page (all components and all of their attributes, etc.) or show us the application on apex.oracle.com so we can see it (preferred).
    3. What version of Application Express and database?
    Scott

  • ORA-12008: error in snapshot refresh path

    I am getting this error even i am specifying to use other rollback segment
    ALTER ROLLBACK SEGMENT R02 SHRINK;
    SET TRANSACTION USE ROLLBACK SEGMENT R02;
    alter materialized view PAY_REV_BREAKUPWITHWOFF NOLOGGING;
    BEGIN dbms_mview.refresh('PAY_REV_BREAKUPWITHWOFF') ; END;
    ERROR at line 1:
    ORA-12008: error in snapshot refresh path
    ORA-01562: failed to extend rollback segment number 1
    ORA-01628: max # extents (505) reached for rollback segment SYS_RBS
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 617
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 674
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 654
    ORA-06512: at line 1

    The reason why it's still using SYS_RBS seems to be that since you are refreshing a materialized view, it might be doing parallel DMLs. In this case the clause of specifying a particular rollback segment is ignored.
    In addition to the above, try taking the rollback segment offline by executing
    alter rollback segment SYS_RBS offline;
    and then drop it by running
    drop rollback segment SYS_RBS;
    Then create new one and see if it works.
    if the above mentioned doesn't work somehow...
    try to change the extents storage parameter by running
    alter rollback segment sys_rbs storage (MAXEXTENTS 1000);
    Can't be sure as i currently don't have access to my system
    Hope this helps
    Message was edited by:
    thrilller

Maybe you are looking for

  • PF & Pension Deduction on Basic Arrears

    Dear Consultnats, May I know in which Wagetype, Employer's PF & Pension contribution on Basic Arrears is stored ? I have marked Basic Arrears Wagetype 1ARR for Cumulation Class 11 (EPF Basis). Still the Pay slip shows the Employer PF & Pension basis

  • How to do aging in Receivables 0FI_AR_4

    Hi to all, Can any one tell me the logic to calculate aging in Receivables? Requirement is like that I have to create a query which has 7 buckets. 1 u2013 10        11 u2013 30              31 - 60         61 u2013 90        > 90         NotOverdue  

  • Is there a way to share a book created with iBooks Author in the course manager without having to share it in iBooks Author?

    We have a book that we created, but did not share it on the store, but would like students to be able to download the book in the course manager.

  • USB (Raw) - How to access VISA property: USB Bulk-Out pipe?!?

    I'm trying to use my own USB device. Since I'd like to use more then one USB In/Out Endporint I need to change that Atribute in NI VISA using LabVIEW (afaik. NI VISA uses the lowest Endpoint Number as defualt). According to LabVIEW 7.1 Help > VISA >

  • Include new version of intel hd 4600

    Hi HP TEAM, Ok i hope i will get the support that im looking for ,  My baby : HP ENVY 17-j110ea Leap Motion SE Notebook PC  BTW i have researched the forum, found similar problems but not the one that im looking for so i got tired bcz i paid a lot of