I need an help regarding Bulk collect

Can we use bulkcollect with sys_refursor ?
for ex :
create or replace procedure sampelpro ( recs out sys_refcursor) is
begin
execute immediate 'select * from table1' bulk collect into recs ;
end sampelpro;
Note : table1 has 1+ laks record
if the above code is not possible then let me know any possible ways ?

Hi and welcome to the forum
Can we use bulkcollect with sys_refursor ?No, and you shouldn't.
Your signature says that OUT parameter is a cursor. A cursor is not a resultset, but rather a pointer to one.
So your best choice is probably just to use that, and not try to select into a collection.
Note : table1 has 1+ laks recordEven more important then not to return a collection, but a cursor. (Although I don't remember what a lak is)
Example on how to use:
create or replace procedure sampelpro (recs out sys_refcursor)
is
begin
    open recs for 'select empno, ename from emp';
end sampelpro;
Procedure er oprettetAnd a test. Imagine this being a Java client or something the like
SQL> var c refcursor
SQL> exec sampelpro(:c)
PL/SQL-procedure er udf°rt.
SQL> print c
     EMPNO ENAME
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
      7788 SCOTT
      7839 KING
      7844 TURNER
      7876 ADAMS
     EMPNO ENAME
      7900 JAMES
      7902 FORD
      7934 MILLER
14 rµkker er valgt.
SQL>Blushadow has a nice post on cursors here:
PL/SQL 101 : Understanding Ref Cursors
Regards
Peter

Similar Messages

  • Hello I need a help regarding application passbook.I need know if I can download the application passbook as passbook.ipa?

    Hello I need a help regarding application passbook.I need know if I can download the application passbook as passbook.ipa?

    Passbook is an app that's built into the iPhone. It's not availble for the iPad.

  • Need help in Bulk collect

    Hi All,
    I need a help to create a bulk statement. Please find the scenario below
    I would like to copy a table A from table B using bulk collect also the table A has more records (1Million). Before doing this I need to either truncate the table B or drop the table to load the data from table A.
    Please provide me the correct statement to achieve this request. Thanks in advance!!
    Regards,
    Boovan.

    disabling any indexes on the target should be looked at first. If there are none then look at the above.
    When you do a direct path load the indexes are build after loading.The point is that the direct path load does not avoid the undo due to the indexes.
    In this example on a table with no indexes the undo used goes from 216kb to 16kb using append.
    When an index is added the undo used goes up from 216kb to 704kb an increase of 488kb for a standard insert.
    For the direct path insert the undo goes up from 16kb to 440kb so almost the full amount of undo due to the index.
    So the presence of a single index can have a much greater impact on the amount of undo required than the use of a direct path load and that undo may not be avoided by the use of a direct path load unless the index is disabled beforehand.
    Also note the tiny amounts of undo we are talking about for 50k rows.
    SQL> create table t as select * from all_objects where 0 = 1;
    Table created.
    SQL> insert into t select * from all_objects;
    56108 rows created.
    SQL> select
      2      used_ublk undo_used_blk,
      3      used_ublk * blk_size_kb undo_used_kb,
      4      log_io logical_io,
      5      cr_get consistent_gets
      6  from
      7      v$transaction, v$session s,
      8      (select distinct sid from v$mystat) m,
      9      (select to_number(value)/1024 blk_size_kb
    10          from v$parameter where name='db_block_size')
    11  where
    12      m.sid       =   s.sid
    13  and ses_addr    =   saddr;
    UNDO_USED_BLK UNDO_USED_KB LOGICAL_IO CONSISTENT_GETS
               27          216      13893         1042736
    SQL> rollback;
    Rollback complete.
    SQL> insert /*+ append */ into t select * from all_objects;
    56108 rows created.
    SQL> select
      2      used_ublk undo_used_blk,
      3      used_ublk * blk_size_kb undo_used_kb,
      4      log_io logical_io,
      5      cr_get consistent_gets
      6  from
      7      v$transaction, v$session s,
      8      (select distinct sid from v$mystat) m,
      9      (select to_number(value)/1024 blk_size_kb
    10          from v$parameter where name='db_block_size')
    11  where
    12      m.sid       =   s.sid
    13  and ses_addr    =   saddr;
    UNDO_USED_BLK UNDO_USED_KB LOGICAL_IO CONSISTENT_GETS
                2           16       1307         1041151
    SQL> rollback;
    Rollback complete.
    SQL> create unique index t_idx on t (object_id);
    Index created.
    SQL> insert into t select * from all_objects;
    56109 rows created.
    SQL> select
      2      used_ublk undo_used_blk,
      3      used_ublk * blk_size_kb undo_used_kb,
      4      log_io logical_io,
      5      cr_get consistent_gets
      6  from
      7      v$transaction, v$session s,
      8      (select distinct sid from v$mystat) m,
      9      (select to_number(value)/1024 blk_size_kb
    10          from v$parameter where name='db_block_size')
    11  where
    12      m.sid       =   s.sid
    13  and ses_addr    =   saddr;
    UNDO_USED_BLK UNDO_USED_KB LOGICAL_IO CONSISTENT_GETS
               88          704      20908         1043193
    SQL> rollback;
    Rollback complete.
    SQL> insert /*+ append */ into t select * from all_objects;
    56109 rows created.
    SQL> select
      2      used_ublk undo_used_blk,
      3      used_ublk * blk_size_kb undo_used_kb,
      4      log_io logical_io,
      5      cr_get consistent_gets
      6  from
      7      v$transaction, v$session s,
      8      (select distinct sid from v$mystat) m,
      9      (select to_number(value)/1024 blk_size_kb
    10          from v$parameter where name='db_block_size')
    11  where
    12      m.sid       =   s.sid
    13  and ses_addr    =   saddr;
    UNDO_USED_BLK UNDO_USED_KB LOGICAL_IO CONSISTENT_GETS
               57          456       2310         1041047

  • Need help with Bulk Collect ForAll Update

    Hi - I'm trying to do a Bulk Collect/ForAll Update but am having issues.
    My declarations look like this:
         CURSOR cur_hhlds_for_update is
            SELECT hsh.household_id, hsh.special_handling_type_id
              FROM compas.household_special_handling hsh
                 , scr_id_lookup s
             WHERE hsh.household_id = s.id
               AND s.scr = v_scr
               AND s.run_date = TRUNC (SYSDATE)
               AND effective_date IS NULL
               AND special_handling_type_id = 1
               AND created_by != v_user;
         TYPE rec_hhlds_for_update IS RECORD (
              household_id  HOUSEHOLD_SPECIAL_HANDLING.household_id%type,
              spec_handl_type_id HOUSEHOLD_SPECIAL_HANDLING.SPECIAL_HANDLING_TYPE_ID%type
         TYPE spec_handling_update_array IS TABLE OF rec_hhlds_for_update;
         l_spec_handling_update_array  spec_handling_update_array;And then the Bulk Collect/ForAll looks like this:
           OPEN cur_hhlds_for_update;
           LOOP
            FETCH cur_hhlds_for_update BULK COLLECT INTO l_spec_handling_update_array LIMIT 1000;
            EXIT WHEN l_spec_handling_update_array.count = 0;
            FORALL i IN 1..l_spec_handling_update_array.COUNT
            UPDATE compas.household_special_handling
               SET effective_date =  TRUNC(SYSDATE)
                 , last_modified_by = v_user
                 , last_modified_date = SYSDATE
             WHERE household_id = l_spec_handling_update_array(i).household_id
               AND special_handling_type_id = l_spec_handling_update_array(i).spec_handl_type_id;
              l_special_handling_update_cnt := l_special_handling_update_cnt + SQL%ROWCOUNT;         
          END LOOP;And this is the error I'm receiving:
    ORA-06550: line 262, column 31:
    PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND table of records
    ORA-06550: line 262, column 31:
    PLS-00382: expression is of wrong type
    ORA-06550: line 263, column 43:
    PL/SQL: ORA-22806: not an object or REF
    ORA-06550: line 258, column 9:
    PL/SQL: SQMy problem is that the table being updated has a composite primary key so I have two conditions in my where clause. This the the first time I'm even attempting the Bulk Collect/ForAll Update and it seems like it would be straight forward if I was only dealing with a single-column primary key. Can anyone please help advise me as to what I'm missing here or how I can accomplish this?
    Thanks!
    Christine

    You cannot reference a column inside a record when doin a for all. You need to refer as a whole collection . So you will need two collections.
    Try like this,
    DECLARE
       CURSOR cur_hhlds_for_update
       IS
          SELECT hsh.household_id, hsh.special_handling_type_id
            FROM compas.household_special_handling hsh, scr_id_lookup s
           WHERE hsh.household_id = s.ID
             AND s.scr = v_scr
             AND s.run_date = TRUNC (SYSDATE)
             AND effective_date IS NULL
             AND special_handling_type_id = 1
             AND created_by != v_user;
       TYPE arr_household_id IS TABLE OF HOUSEHOLD_SPECIAL_HANDLING.household_id%TYPE
                                   INDEX BY BINARY_INTEGER;
       TYPE arr_spec_handl_type_id IS TABLE OF HOUSEHOLD_SPECIAL_HANDLING.SPECIAL_HANDLING_TYPE_ID%TYPE
                                         INDEX BY BINARY_INTEGER;
       l_household_id_col         arr_household_id;
       l_spec_handl_type_id_col   arr_spec_handl_type_id;
    BEGIN
       OPEN cur_hhlds_for_update;
       LOOP
          FETCH cur_hhlds_for_update
            BULK COLLECT INTO l_household_id_col, l_spec_handl_type_id_col
          LIMIT 1000;
          EXIT WHEN cur_hhlds_for_update%NOTFOUND;
          FORALL i IN l_household_id_col.FIRST .. l_household_id_col.LAST
             UPDATE compas.household_special_handling
                SET effective_date = TRUNC (SYSDATE),
                    last_modified_by = v_user,
                    last_modified_date = SYSDATE
              WHERE household_id = l_household_id_col(i)
                AND special_handling_type_id = l_spec_handl_type_id_col(i);
       --l_special_handling_update_cnt := l_special_handling_update_cnt + SQL%ROWCOUNT; -- Not sure what this does.
       END LOOP;
    END;G.

  • Needed help in bulk collect using collections

    Hi,
    I have created a schema level collection like "CREATE OR REPLACE TYPE T_EMP_NO IS TABLE OF NUMBER ;
    will i able to use this in a where clause which involves bulk collect?
    Please share ur thoughts.
    My oracle version is 10g

    user13710379 wrote:
    Will i be able to do a bulk collect into a table using this collection of my sql type?Bulk fetches collects into an array like structure - not into a SQL table like structure. So calling a collection variable in PL/SQL a "+PL/SQL table+" does not make much sense as this array structure is nothing like a table. For the same reason, one needs to question running SQL select statements against PL/SQL arrays.
    As for your SQL type defined - it is a collection (array) of numbers. Thus it can be used to bulk fetch a numeric column.

  • Regarding Bulk Collect Operations

    I would like to know what things need to be considered in order to implement the bulk collect operations. I have tables with >100,000 rows, for which I am planning to use Bulk collect. Am I correct in saying that bulk collect is a memory intensive operation.
    Any help would be appreciated.
    Thanks

    You will want to use the LIMIT clause to only bulk collect up to 1000 rows or so at a time.
    http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:5918938803188

  • Need to increase performance-bulk collect in cursor with limit and in the for loop inserting into the trigger table

    Hi all,
    I have a performance issue in the below code,where i am trying to insert the data from table_stg into target_tab and in parent_tab tables and then to child tables via cursor with bulk collect .the target_tab and parent_tab are huge tables and have a row wise trigger enabled on it .the trigger is mandatory . This timetaken for this block to execute is 5000 seconds.Now my requirement is to reduce it to 5 to 10 mins.
    can someone please guide me here.Its bit urgent .Awaiting for your response.
    declare
    vmax_Value NUMBER(5);
      vcnt number(10);
      id_val number(20);
      pc_id number(15);
      vtable_nm VARCHAR2(100);
      vstep_no  VARCHAR2(10);
      vsql_code VARCHAR2(10);
      vsql_errm varchar2(200);
      vtarget_starttime timestamp;
      limit_in number :=10000;
      idx           number(10);
              cursor stg_cursor is
             select
                   DESCRIPTION,
                   SORT_CODE,
                   ACCOUNT_NUMBER,
                     to_number(to_char(CORRESPONDENCE_DATE,'DD')) crr_day,
                     to_char(CORRESPONDENCE_DATE,'MONTH') crr_month,
                     to_number(substr(to_char(CORRESPONDENCE_DATE,'DD-MON-YYYY'),8,4)) crr_year,
                   PARTY_ID,
                   GUID,
                   PAPERLESS_REF_IND,
                   PRODUCT_TYPE,
                   PRODUCT_BRAND,
                   PRODUCT_HELD_ID,
                   NOTIFICATION_PREF,
                   UNREAD_CORRES_PERIOD,
                   EMAIL_ID,
                   MOBILE_NUMBER,
                   TITLE,
                   SURNAME,
                   POSTCODE,
                   EVENT_TYPE,
                   PRIORITY_IND,
                   SUBJECT,
                   EXT_PRD_ID_TX,
                   EXT_PRD_HLD_ID_TX,
                   EXT_SYS_ID,
                   EXT_PTY_ID_TX,
                   ACCOUNT_TYPE_CD,
                   COM_PFR_TYP_TX,
                   COM_PFR_OPT_TX,
                   COM_PFR_RSN_CD
             from  table_stg;
    type rec_type is table of stg_rec_type index by pls_integer;
    v_rt_all_cols rec_type;
    BEGIN
      vstep_no   := '0';
      vmax_value := 0;
      vtarget_starttime := systimestamp;
      id_val    := 0;
      pc_id     := 0;
      success_flag := 0;
              vstep_no  := '1';
              vtable_nm := 'before cursor';
        OPEN stg_cursor;
              vstep_no  := '2';
              vtable_nm := 'After cursor';
       LOOP
              vstep_no  := '3';
              vtable_nm := 'before fetch';
    --loop
        FETCH stg_cursor BULK COLLECT INTO v_rt_all_cols LIMIT limit_in;
                  vstep_no  := '4';
                  vtable_nm := 'after fetch';
    --EXIT WHEN v_rt_all_cols.COUNT = 0;
        EXIT WHEN stg_cursor%NOTFOUND;
    FOR i IN 1 .. v_rt_all_cols.COUNT
      LOOP
       dbms_output.put_line(upper(v_rt_all_cols(i).event_type));
        if (upper(v_rt_all_cols(i).event_type) = upper('System_enforced')) then
                  vstep_no  := '4.1';
                  vtable_nm := 'before seq sel';
              select PC_SEQ.nextval into pc_id from dual;
                  vstep_no  := '4.2';
                  vtable_nm := 'before insert corres';
              INSERT INTO target1_tab
                           (ID,
                            PARTY_ID,
                            PRODUCT_BRAND,
                            SORT_CODE,
                            ACCOUNT_NUMBER,
                            EXT_PRD_ID_TX,         
                            EXT_PRD_HLD_ID_TX,
                            EXT_SYS_ID,
                            EXT_PTY_ID_TX,
                            ACCOUNT_TYPE_CD,
                            COM_PFR_TYP_TX,
                            COM_PFR_OPT_TX,
                            COM_PFR_RSN_CD,
                            status)
             VALUES
                            (pc_id,
                             v_rt_all_cols(i).party_id,
                             decode(v_rt_all_cols(i).product_brand,'LTB',2,'HLX',1,'HAL',1,'BOS',3,'VER',4,0),
                             v_rt_all_cols(i).sort_code,
                             'XXXX'||substr(trim(v_rt_all_cols(i).ACCOUNT_NUMBER),length(trim(v_rt_all_cols(i).ACCOUNT_NUMBER))-3,4),
                             v_rt_all_cols(i).EXT_PRD_ID_TX,
                             v_rt_all_cols(i).EXT_PRD_HLD_ID_TX,
                             v_rt_all_cols(i).EXT_SYS_ID,
                             v_rt_all_cols(i).EXT_PTY_ID_TX,
                             v_rt_all_cols(i).ACCOUNT_TYPE_CD,
                             v_rt_all_cols(i).COM_PFR_TYP_TX,
                             v_rt_all_cols(i).COM_PFR_OPT_TX,
                             v_rt_all_cols(i).COM_PFR_RSN_CD,
                             NULL);
                  vstep_no  := '4.3';
                  vtable_nm := 'after insert corres';
        else
              select COM_SEQ.nextval into id_val from dual;
                  vstep_no  := '6';
                  vtable_nm := 'before insertcomm';
          if (upper(v_rt_all_cols(i).event_type) = upper('REMINDER')) then
                vstep_no  := '6.01';
                  vtable_nm := 'after if insertcomm';
              insert into parent_tab
                 (ID ,
                 CTEM_CODE,
                 CHA_CODE,            
                 CT_CODE,                           
                 CONTACT_POINT_ID,             
                 SOURCE,
                 RECEIVED_DATE,                             
                 SEND_DATE,
                 RETRY_COUNT)
              values
                 (id_val,
                  lower(v_rt_all_cols(i).event_type), 
                  decode(v_rt_all_cols(i).product_brand,'LTB',2,'HLX',1,'HAL',1,'BOS',3,'VER',4,0),
                  'Email',
                  v_rt_all_cols(i).email_id,
                  'IADAREMINDER',
                  systimestamp,
                  systimestamp,
                  0);  
         else
                vstep_no  := '6.02';
                  vtable_nm := 'after else insertcomm';
              insert into parent_tab
                 (ID ,
                 CTEM_CODE,
                 CHA_CODE,            
                 CT_CODE,                           
                 CONTACT_POINT_ID,             
                 SOURCE,
                 RECEIVED_DATE,                             
                 SEND_DATE,
                 RETRY_COUNT)
              values
                 (id_val,
                  lower(v_rt_all_cols(i).event_type), 
                  decode(v_rt_all_cols(i).product_brand,'LTB',2,'HLX',1,'HAL',1,'BOS',3,'VER',4,0),
                  'Email',
                  v_rt_all_cols(i).email_id,
                  'CORRESPONDENCE',
                  systimestamp,
                  systimestamp,
                  0); 
            END if; 
                  vstep_no  := '6.11';
                  vtable_nm := 'before chop';
             if (v_rt_all_cols(i).ACCOUNT_NUMBER is not null) then 
                      v_rt_all_cols(i).ACCOUNT_NUMBER := 'XXXX'||substr(trim(v_rt_all_cols(i).ACCOUNT_NUMBER),length(trim(v_rt_all_cols(i).ACCOUNT_NUMBER))-3,4);
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE)
              values
                (id_val,
                 'IB.Correspondence.AccountNumberMasked',
                 v_rt_all_cols(i).ACCOUNT_NUMBER);
             end if;
                  vstep_no  := '6.1';
                  vtable_nm := 'before stateday';
             if (v_rt_all_cols(i).crr_day is not null) then 
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE)
              values
                (id_val,
                 --'IB.Correspondence.Date.Day',
                 'IB.Crsp.Date.Day',
                 v_rt_all_cols(i).crr_day);
             end if;
                  vstep_no  := '6.2';
                  vtable_nm := 'before statemth';
             if (v_rt_all_cols(i).crr_month is not null) then 
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE)
              values
                (id_val,
                 --'IB.Correspondence.Date.Month',
                 'IB.Crsp.Date.Month',
                 v_rt_all_cols(i).crr_month);
             end if;
                  vstep_no  := '6.3';
                  vtable_nm := 'before stateyear';
             if (v_rt_all_cols(i).crr_year is not null) then 
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE)
              values
                (id_val,
                 --'IB.Correspondence.Date.Year',
                 'IB.Crsp.Date.Year',
                 v_rt_all_cols(i).crr_year);
             end if;
                  vstep_no  := '7';
                  vtable_nm := 'before type';
               if (v_rt_all_cols(i).product_type is not null) then
                  insert into child_tab
                     (COM_ID,                                            
                     KEY,                                                                                                                                        
                     VALUE)
                  values
                    (id_val,
                     'IB.Product.ProductName',
                   v_rt_all_cols(i).product_type);
                end if;
                  vstep_no  := '9';
                  vtable_nm := 'before title';         
              if (trim(v_rt_all_cols(i).title) is not null) then
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE )
              values
                (id_val,
                 'IB.Customer.Title',
                 trim(v_rt_all_cols(i).title));
              end if;
                  vstep_no  := '10';
                  vtable_nm := 'before surname';
              if (v_rt_all_cols(i).surname is not null) then
                insert into child_tab
                   (COM_ID,                                            
                   KEY,                                                                                                                                          
                   VALUE)
                values
                  (id_val,
                  'IB.Customer.LastName',
                  v_rt_all_cols(i).surname);
              end if;
                            vstep_no  := '12';
                            vtable_nm := 'before postcd';
              if (trim(v_rt_all_cols(i).POSTCODE) is not null) then
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE)                              
               values
                (id_val,
                 'IB.Customer.Addr.PostCodeMasked',
                  substr(replace(v_rt_all_cols(i).POSTCODE,' ',''),length(replace(v_rt_all_cols(i).POSTCODE,' ',''))-2,3));
              end if;
                            vstep_no  := '13';
                            vtable_nm := 'before subject';
              if (trim(v_rt_all_cols(i).SUBJECT) is not null) then
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE)                              
               values
                (id_val,
                 'IB.Correspondence.Subject',
                  v_rt_all_cols(i).subject);
              end if;
                            vstep_no  := '14';
                            vtable_nm := 'before inactivity';
              if (trim(v_rt_all_cols(i).UNREAD_CORRES_PERIOD) is null or
                  trim(v_rt_all_cols(i).UNREAD_CORRES_PERIOD) = '3' or
                  trim(v_rt_all_cols(i).UNREAD_CORRES_PERIOD) = '6' or
                  trim(v_rt_all_cols(i).UNREAD_CORRES_PERIOD) = '9') then
              insert into child_tab
                 (COM_ID,                                            
                 KEY,                                                                                                                                            
                 VALUE)                              
               values
                (id_val,
                 'IB.Correspondence.Inactivity',
                  v_rt_all_cols(i).UNREAD_CORRES_PERIOD);
              end if;
                          vstep_no  := '14.1';
                          vtable_nm := 'after notfound';
        end if;
                          vstep_no  := '15';
                          vtable_nm := 'after notfound';
        END LOOP;
        end loop;
                          vstep_no  := '16';
                          vtable_nm := 'before closecur';
        CLOSE stg_cursor;
                          vstep_no  := '17';
                          vtable_nm := 'before commit';
        DELETE FROM table_stg;
      COMMIT;
                          vstep_no  := '18';
                          vtable_nm := 'after commit';
    EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
      success_flag := 1;
      vsql_code := SQLCODE;
      vsql_errm := SUBSTR(sqlerrm,1,200);
      error_logging_pkg.inserterrorlog('samp',vsql_code,vsql_errm, vtable_nm,vstep_no);
      RAISE_APPLICATION_ERROR (-20011, 'samp '||vstep_no||' SQLERRM:'||SQLERRM);
    end;
    Thanks

    Its bit urgent
    NO - it is NOT urgent. Not to us.
    If you have an urgent problem you need to hire a consultant.
    I have a performance issue in the below code,
    Maybe you do and maybe you don't. How are we to really know? You haven't posted ANYTHING indicating that a performance issue exists. Please read the FAQ for how to post a tuning request and the info you need to provide. First and foremost you have to post SOMETHING that actually shows that a performance issue exists. Troubleshooting requires FACTS not just a subjective opinion.
    where i am trying to insert the data from table_stg into target_tab and in parent_tab tables and then to child tables via cursor with bulk collect .the target_tab and parent_tab are huge tables and have a row wise trigger enabled on it .the trigger is mandatory . This timetaken for this block to execute is 5000 seconds.Now my requirement is to reduce it to 5 to 10 mins.
    Personally I think 5000 seconds (about 1 hr 20 minutes) is very fast for processing 800 trillion rows of data into parent and child tables. Why do you think that is slow?
    Your code has several major flaws that need to be corrected before you can even determine what, if anything, needs to be tuned.
    This code has the EXIT statement at the beginning of the loop instead of at the end
        FETCH stg_cursor BULK COLLECT INTO v_rt_all_cols LIMIT limit_in;
                  vstep_no  := '4';
                  vtable_nm := 'after fetch';
    --EXIT WHEN v_rt_all_cols.COUNT = 0;
        EXIT WHEN stg_cursor%NOTFOUND;
    The correct place for the %NOTFOUND test when using BULK COLLECT is at the END of the loop; that is, the last statement in the loop.
    You can use a COUNT test at the start of the loop but ironically you have commented it out and have now done it wrong. Either move the NOTFOUND test to the end of the loop or remove it and uncomment the COUNT test.
    WHEN OTHERS THEN
      ROLLBACK;
    That basically says you don't even care what problem occurs or whether the problem is for a single record of your 10,000 in the collection. You pretty much just throw away any stack trace and substitute your own message.
    Your code also has NO exception handling for any of the individual steps or blocks of code.
    The code you posted also begs the question of why you are using NAME=VALUE pairs for child data rows? Why aren't you using a standard relational table for this data?
    As others have noted you are using slow-by-slow (row by row processing). Let's assume that PL/SQL, the bulk collect and row-by-row is actually necessary.
    Then you should be constructing the parent and child records into collections and then inserting them in BULK using FORALL.
    1. Create a collection for the new parent rows
    2. Create a collection for the new child rows
    3. For each set of LIMIT source row data
      a. empty the parent and child collections
      b. populate those collections with new parent/child data
      c. bulk insert the parent collection into the parent table
      d. bulk insert the child collection into the child table
    And unless you really want to either load EVERYTHING or abandon everything you should use bulk exception handling so that the clean data gets processed and only the dirty data gets rejected.

  • Need urgent help regarding oracle 8.0

    Hi Guys!!
    This is vishal, and i am working as an oracle developer.
    I would appreciate your help if you could help me solving the below
    issue :
    Right now the database on which we are running our applications is
    8.0 version. We have oracle App server on which all of these j2ee
    applications are running.
    basically our client is trying to move large amount of data to a
    new database probably 10G, so my job is to analyse the code and
    do some modifications to the code, give them a solution to upgrade
    it to 10g
    There are like 10 applications running on oracle app server and the
    database has many old tables, and they need a suggestion regarding
    this upgradation/migration.
    And i specifically want to know about the problems faced during the
    upgradation, and how exactly is the upgradation done(step -by -step
    procedure), because i also have to take care of the data which
    has been stored from many years.
    thanks,
    Vishal

    I find these informations in the Upgrade Guide (upgrading of database and of application programs):
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14238/toc.htm
    Note: direct upgrade from 8.0 to 10g is not supported using tools like DBUA (Database Upgrade Assistant).
    Werner

  • Help in BULK COLLECT

    In emp table having 14 records when i use the BULK COLLECT its inserting the 12 records only
    with out limting its working fine But when u limit the records inserting the 12 records only
    i need 14 records to be inserted in emps table through limiting ..
    Suggest me in this
    DECLARE
      TYPE a_recs IS TABLE OF emps%ROWTYPE;
      v_recs a_recs;
      CURSOR c1 IS
      SELECT *
      FROM emp;
    BEGIN
      DELETE FROM emps;
      COMMIT;
      OPEN c1;
      LOOP
         FETCH c1 BULK COLLECT INTO v_recs LIMIT 3;
         EXIT WHEN c1%NOTFOUND;
          FORALL i IN v_recs.FIRST..v_recs.LAST
          INSERT INTO emps
            VALUES v_recs(i);
      END LOOP;
      CLOSE c1;
    END;Thanks

    assuming this is only an exercise, change the order of FORALL and EXIT
    FORALL i IN v_recs.FIRST..v_recs.LAST
    INSERT INTO emps
    VALUES v_recs(i);
    EXIT WHEN c1%NOTFOUND;otherwise, just do
    insert into emps
    select *
      from empEdited by: Alex Nuijten on Aug 5, 2009 8:50 AM

  • Regarding Bulk Collect

    Hi,
    I have some problem in BULK binding.
    See below code, we have three columns in pl/sql record and table based on that record is populated with rows.
    Now requirement is like, I want to store two of the columns in table with the help of FORALL statement.
    So tried with below code. But it is not working.
    How we can achieve this with the help of forall statement.
    Please comment...
    declare
    type p_ref is ref cursor;
    ref1 p_ref;
    type p_rec is record
    (owner varchar2(100),
    table_name varchar2(100),
    tablespace_name varchar2(100));
    type p_tab is table of p_rec;
    tab1 p_tab;
    begin
    open ref1 for 'select 123,table_name,tablespace_name from user_tables where rownum<=10';
    fetch ref1 bulk collect into tab1;
    close ref1;
    forall i in tab1.first..tab1.last
    insert into test_tab1(table_name,tablespace_name)
    values(tab1(i).table_name,tab1(i).tablespace_name);
    end;
    ERROR at line 19:
    ORA-06550: line 19, column 8:
    PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND
    table of records
    ORA-06550: line 19, column 8:
    PLS-00382: expression is of wrong type
    ORA-06550: line 19, column 27:
    PLS-00436: implementation restriction: cannot reference fields of BULK In-BIND
    table of records
    ORA-06550: line 19, column 27:
    PLS-00382: expression is of wrong type
    ORA-06550: line 19, column 8:
    PL/SQL: ORA-22806: not an object or REF
    ORA-06550: line 18, column 1:
    PL/SQL: SQL Statement ignored

    See below code, I do want to share one pl/sql for both table(test_tab1,test_tab) insertion.
    SQL> desc test_tab1
    Name Null? Type
    TABLE_NAME NOT NULL VARCHAR2(30)
    TABLESPACE_NAME VARCHAR2(30)
    SQL> desc test_tab
    Name Null? Type
    OWNER NOT NULL VARCHAR2(30)
    TABLE_NAME NOT NULL VARCHAR2(30)
    TABLESPACE_NAME VARCHAR2(30)
    declare
    type p_ref is ref cursor;
    ref1 p_ref;
    type p_rec is record
    (owner varchar2(100),
    table_name varchar2(100),
    tablespace_name varchar2(100));
    type p_tab is table of p_rec;
    tab1 p_tab;
    opt number := &opt;
    begin
    IF opt =1 THEN
    open ref1 for 'select 123,table_name,tablespace_name from user_tables where rownum<=10';
    ELSE
    open ref1 for 'select owner,table_name,tablespace_name from all_tables where rownum<=10';
    END IF;
    fetch ref1 bulk collect into tab1;
    close ref1;
    forall i in tab1.first..tab1.last
    IF opt=1 THEN
    insert into test_tab1(table_name,tablespace_name)
    values(tab1(i).table_name,tab1(i).tablespace_name);
    ELSE
    insert into test_tab values(tab1(i));
    END IF;
    end;

  • I need your help regarding Macbook Pro with FCS3 via USB

    Sorry for the double posting, I need your help...
    I am producing an independent TV movie. We are shooting in HDV with a Sony Z5.
    Currently I am using a 2007 iMac (1gb) for the FCS3. I am considering buying a Macbook Pro 15' i7, because I need the portability as well as a WD 1TB portable external drive.
    Just when I am about to buy the machine I started to read all about the USB vs. the Firewire. What should I do? The MBP only have one firewire port...if I use an USB portable external drive means that I won't be able to use FCS3 properly and that buying a MBP will mean spending money in something that I won't be able to make it work properly??
    Thanks for your help!!!!

    Hi there,
    As Patrick said its Firewire hubs you should avoid along with directly connecting your media drive via USB. USB hubs are fine for connecting peripherals (keyboards, tablets, mice etc). directly connecting USB media drives is not for streaming video due to their method of sending data in packets rather than as the continuous stream that firewire provides. Firewire hubs just seem to cause all sorts of headaches to those that have used them, I cant give you a specific reason other than splitting the available FW bandwidth (someone with more knowledge on this will have to chime in), its more just inherited practice.
    cheers
    ANdy

  • I need some help Regarding Cumulative totals

    Hi ,
    i have a requirement
    1) we have columns calender Periods and actual to date. The requirement is we need cumulate the actual to date. i have applyed RSUM function in column formula.
    2) it is working fine. But again the requirement is this cumulative solution is changed based on selected calender periods. but this is not expected.
    3) ex:-
    calender period actual Units Cumulative Units
    oct - 2010 10 10
    Nov-2010 9 19
    Dec-2010 15 34
    Jan-2011 25 59
    Feb-2011 12 71
    March-2011 19 90
    April - 2011 13 103
    May - 2011 18 121
    June - 2011 24 145
    this is the reqiurement but i have a Prompt Like
    i hve selected resource categery some xyz and stert period is Jan -2011 and end period is May - 2011
    the values disply's like bellow
    Resource Category start Period End Period
    xyz Jan - 2011 May - 2011
    Jan-2011 25 25
    Feb-2011 12 37
    March-2011 19 58
    April - 2011 13 71
    May - 2011 18 89
    But this is not actual cumulative units the actual value for Jan 2011 cumulative value is 59 not 25
    can any one help me regarding this issue
    regards,
    ramesh

    Hi,
    Refer this link abt iview properties & set authorization ...
    http://help.sap.com/saphelp_nw04/helpdata/en/13/81a66d100011d7b84b00047582c9f7/frameset.htm
    Color- you have to change portal theme...
    Width- create a new Loyout..
    Regards,
    Senthil K.

  • In urgent need of help regarding getting month name and dates

    Hi Experts
    I have a table called MONTHLYBILL with Column TRANSACTIONMONTH. I need one query / function / SP to do return ouput based on following combination. I am using Oracle 9i
    Have researched on various forums, documents but unable to get the desired output. Finally here in hope of help.
    Input
    From Date: 06/01/2011
    To Date: 12/03/2011
    Output
    Month: DECEMBER-2010 (previous month of From Date). Now if DECEMBER-2010 is not available in table, then returns the
    month which is available immediately the month preceeding DECEMBER-2010
    Begin Date: 01/01/2011 (1st day following the month returned in output)
    End Date: 31/03/2011 (last date of month based on input To Date)
    Input
    From Date: Null
    To Date: 12/03/2011
    Output
    Month: First available transactionmonth in DB (say JANUARY-2010)
    Begin Date: 01/02/2011 (1st day following the month returned in output)
    End Date: 31/03/2011 (last date of month based on input To Date)
    Input
    From Date: Null
    To Date: Null
    Output
    Month: First available transactionmonth in DB (say JANUARY-2010)
    Begin Date: 01/02/2011 (1st day following the month returned in output)
    End Date: Current month's last date

    What is your application release?
    I am in big trouble now.. can anyone help....
    I have a backup of an EBS instance, lets say it was taken one month ago, and now we got some datas lost in the current production server..
    some one deleted some datas...
    Now we need some specific data from the old backup and restore it to the production
    or can it be restored? please help me guys...What kind of data? What is the table name?
    Since this is a production issue, I would suggest you log a SR.
    Thanks,
    Hussein

  • Need urgent help regarding Adobe LC ES2 JBOSS Clustering

    Hi,
    Am trying to setup a Horizontal Cluster setup(with two nodes) for Adobe LiveCycle ES2 with Adobe preconfigured JBOSS 4.2.1 and MSSQL 2008(single instance running on one of the nodes).
    I have successfully completed till Installing LC ES2 Modules in both the nodes according to the "Configuring LiveCycle® ES2 Application Server Clusters Using JBoss" document.
    But now the problem is about the next step, which is "Configuring LiveCycle ES2 for Deployment". The steps in this section do not clearly talk about where to run the configuration manager tool, i mean on which node of the cluster as two nodes are different machines in my case as it is a horizontal cluster. But at step 20 of configuring LC ES2(page 45 of the above mentioned document) there's note which says "Note: You need to initialize the database against only one server of the cluster. Subsequent steps need to be performed on only this server as well."
    Now,
    i) Does it mean that till step 19 i will have to parallely run configuration manager tool on both the nodes of the cluster and at step 20 i will have to completely exit the configuration manager tool on one node(Say node A) and continue the rest of all the steps(till 46) only in the other node( node B ) ?
                                                                                    OR
    I will have to keep the configuration manager window open in both the machines and perform some steps say for example 20 to 25 only in one node(say node B ) and skip these steps in node A and resume from 26 in node A and complete till the end in both the machines ?
    ii) At step 16 of the same section theres a note which says "Note: The paths for pop3.jar and the JDK must be same on all nodes in the cluster.". Where will the pop3.jar be ? I cudn't find it anywhere in the installation media or in the server folders ?
    Please help me asap as am stuck with it for two days !!! Please let me know if you need any other details.

    Hi,
    Am trying to setup a Horizontal Cluster setup(with two nodes) for Adobe LiveCycle ES2 with Adobe preconfigured JBOSS 4.2.1 and MSSQL 2008(single instance running on one of the nodes).
    I have successfully completed till Installing LC ES2 Modules in both the nodes according to the "Configuring LiveCycle® ES2 Application Server Clusters Using JBoss" document.
    But now the problem is about the next step, which is "Configuring LiveCycle ES2 for Deployment". The steps in this section do not clearly talk about where to run the configuration manager tool, i mean on which node of the cluster as two nodes are different machines in my case as it is a horizontal cluster. But at step 20 of configuring LC ES2(page 45 of the above mentioned document) there's note which says "Note: You need to initialize the database against only one server of the cluster. Subsequent steps need to be performed on only this server as well."
    Now,
    i) Does it mean that till step 19 i will have to parallely run configuration manager tool on both the nodes of the cluster and at step 20 i will have to completely exit the configuration manager tool on one node(Say node A) and continue the rest of all the steps(till 46) only in the other node( node B ) ?
                                                                                    OR
    I will have to keep the configuration manager window open in both the machines and perform some steps say for example 20 to 25 only in one node(say node B ) and skip these steps in node A and resume from 26 in node A and complete till the end in both the machines ?
    ii) At step 16 of the same section theres a note which says "Note: The paths for pop3.jar and the JDK must be same on all nodes in the cluster.". Where will the pop3.jar be ? I cudn't find it anywhere in the installation media or in the server folders ?
    Please help me asap as am stuck with it for two days !!! Please let me know if you need any other details.

  • Need some help regarding Client Proxy generation and test via SOAMANAGER

    Hello,
    we are integrating a 3rd party Java client via webservices.
    For that matter I generated a client proxy (consumer proxy) in se80 using the existing WSDL.
    This worked fine.
    The I wanted to create a logical port.
    Since this is only possible in SOAMANAGER I tried it there.
    Trying to do this automatically by the given WSDL file didn't work. The system dumps.
    So, I tried the manual approach by entering the server name and path in the 'Transport settings' tab.
    Now I wanted to test this.
    Unfortunately the test function in se80 (Proxy->Test) doesn't show a positive result.
    I always get an error
    SOAP:1.023 SRT: Processing error in Internet Communication Framework: ("ICF Error when receiving the response:
    ICM_HTTP_CONNECTION_FAILED")
    So, I am kind of stuck here.
    Do you guys have any idea what's wrong (approach, settings, bugs)?.
    I tested the webservices with a test application (soapUI), and they work fine.
    So it seems to be a problem in the proxy framework or a network problem?
    I really appreciate any kind of help.
    Thanks,
    Michael

    i created the port in soamanager.Do i need to create in lpconfig also?
    yes i have loaded the certificate in strust.
    i am getting the response also from the web service. as Security requirements are not satisfied because the security header is not present in the incoming message.
    i need to pass the user name and password while using the method.wsse security.wld u have any clue?

Maybe you are looking for

  • My app prices are shown in euros. How do i turn it back to dollars?

    My app prices are in euros. How do i change them back to dollars?

  • How to change stack value

    I want to change the default stack value. Using "ulimit -s" is affecting only that shell, I need the changes to be permanent. Please help ASAP.

  • I downloaded some mp3s, but there is no sound.

    When I import them into ITunes 10.5.2 there is no sound. I tried importing them into ITunes on Windows (10.5.2.11) and they play fine. Has anyone experienced something like this? Help!

  • Problems after re-installing Windows on W520

    Hi I'm new to this forum, quite weird as I have been using this W520 for 3 years now... I've recently re-installed Windows 7 64bit on my W520 and having some small problems. 1. I can't have the mute-mic hotkey to work as the mute hotkey (no light) an

  • NLAG- Price updation

    Dear All I have created material master for non stock material type and my price indicator is moving Avg price. I have created PO for the same. Now my PO price is different from material master price. I want to update the PO price in material master