Update table record in a sequence

Hi,
There is a table with name Shift Schedule with the columns as
ID Name Sr_no
1 XXX 55
2 XXX 44
3 XXX 34
4 XXX 23
5 XXX 12
6 YYY 44
7 YYY 22
8 YYY 11
9 YYY 98
10 YYY 78
I need to update the Sr_no from 1 to 5 where ever name xxx and yyyy is there sr_no must be replaced from 1 to 5
There are 4000 records please help me how to do
Thanks
Sudhir

Use MERGE:
merge into shift_schedule a
using ( select id
       ,       sr_no
       ,       row_number() over (partition by name order by id) rn
       from   shift_schedule
      ) b
on (b.id = a.id)
when matched then update set a.sr_no = b.rn;And if you're on 9i, you'll have to add an extra (dummy) line for WHEN NOT MATCHED as well, something like:
SQL> select * from shift_schedule;
        ID NAME      SR_NO
         1 XXX          55
         2 XXX          44
         3 XXX          34
         4 XXX          23
         5 XXX          12
         6 YYY          44
         7 YYY          22
         8 YYY          11
         9 YYY          98
        10 YYY          78
10 rows selected
SQL> merge into shift_schedule a
  2  using ( select id
  3         ,       sr_no
  4         ,       row_number() over (partition by name order by id) rn
  5         from   shift_schedule
  6        ) b
  7  on (b.id = a.id)
  8  when matched then update set sr_no = rn
  9  when not matched then insert (id) values (null);
Done
SQL> select * from shift_schedule;
        ID NAME      SR_NO
         1 XXX           1
         2 XXX           2
         3 XXX           3
         4 XXX           4
         5 XXX           5
         6 YYY           1
         7 YYY           2
         8 YYY           3
         9 YYY           4
        10 YYY           5
10 rows selectedhttp://www.oracle-base.com/articles/9i/SQLNewFeatures9i.php#MERGEStatement
http://www.oracle-base.com/articles/10g/MergeEnhancements10g.php
Edited by: hoek on Oct 25, 2010 2:28 PM changed second example

Similar Messages

  • Is it possible to get the updated table records based on date & time.

    Is it possible to get the updated table records based on date & time in oracle.
    Thanks in advance.

    no, actually i am asking update records using 'UPDATE
    or DELETE' statement, but not insert statement.
    Is it possible?
    I think we can do using trigger on table, but problem
    is if i am having 20 tables means i have to write 20
    trigger. i don't want like this.Of course it's still possible, typically you'll find applications with a column LAST_UPDATE, probably a LAST_UPDATED_BY and so on column. You don't say what your business need is, if you just want a one of query of updates to particular records and have a recent version of Oracle, then flashback query may well help, if you want to record update timestamps you either have to modify the table, or write some code to store your updates in an audit table somewhere.
    Niall Litchfield
    http://www.orawin.info/

  • Update new record in database table

    I'm working with TestStand 4.2 and MySQL database with user-defined tables.
    There is "test_results" table with autoincrement "id" (primary index).
    I want to:
    1. write a new record to the test_results table - some data and status "Running"
    2. run a test (pass to a test sequence its "id", test uses this id for writing data to database)
    3. update the record: set execution time and update status.
    So, the steps are as below:
    1. Open database
    2. Open SQL statement: "select * from test_results".
    3. Data Operation: operation - "Set and Put", record to operate on - "New - Create New Record". In the "Column/Parameter Values" tab I set the new record values.
    Here I want to retrieve the new record "id". How to do it?
    Thanks in advance.

    I am not sure how to implement this in Test Stand, but from an SQL programming perspective, you want to run:
    SELECT @@IDENTITY
    Here is a link to the description:  http://msdn.microsoft.com/en-us/library/ms187342.aspx
    It will retrieve the record ID of the row you just inserted.

  • Updating a record in a table

    with the following data set, the records gets loaded into a table transactionally identified by sequence.
    so ideally when a new sequence for a style gets loaded, the previous record in the table should be updated and its date_expire should be set as a 1 day prior to the date_received of the new incoming record.
    with data_Set as (
    select 89949 p_key,'7MMPD6M' style,     '3/1/2007' date_received,     24 duration     ,'6/13/2007' date_expire, 1 sequence from dual union all
    select 89949,     '7MMPD6M',     '3/1/2007',     24,     '6/13/2007',     1 from dual union all
    select 89949,     '7MMPD6M',     '6/14/2007',12,     '6/14/2008',     2 from dual union all
    select 89949,     '7MMPD6M',     '1/1/2008',     24,     '1/1/2010',     3 from dual union all
    select 111111149,     '845TM',     '12/14/2007',12,     '12/14/2008',     1 from dual union all
    select 111111149,     '845TM',     '2/1/2008',     24,     '2/1/2010',     2 from dual
    ) select * from data_Set
    so my result set should look like below.
    with result_Set as (
    select 89949 p_key,'7MMPD6M' style,     '3/1/2007' date_received,     24 duration     ,'6/13/2007' date_expire, 1 sequence from dual union all
    select 89949,     '7MMPD6M',     '3/1/2007',     24,     '6/13/2007',     1 from dual union all
    select 89949,     '7MMPD6M',     '6/14/2007',12,     '12/31/2007',     2 from dual union all
    select 89949,     '7MMPD6M',     '1/1/2008',     24,     '1/1/2010',     3 from dual union all
    select 111111149,     '845TM',     '12/14/2007',12,     '1/31/2008',     1 from dual union all
    select 111111149,     '845TM',     '2/1/2008',     24,     '2/1/2010',     2 from dual
    ) select * from result_Set
    can someone suggest?

    Please, define as well your expectations, and use the SQL & PL/SQL forum, more appropriate for SQL question.
    And use tags {code} and {code} around your code as well to keep spaces.
    Thanks,
    Nicolas.

  • How to update multiple records in a table created in view (web dynpro)

    Here is my coding......
    *coding to get the district value
    DATA lo_nd_district TYPE REF TO if_wd_context_node.
        DATA lo_el_district TYPE REF TO if_wd_context_element.
        DATA ls_district TYPE wd_this->element_district.
        DATA lv_district_txt LIKE ls_district-district_txt.
      navigate from <CONTEXT> to <DISTRICT> via lead selection
        lo_nd_district = wd_context->get_child_node( name = wd_this->wdctx_district ).
      get element via lead selection
        lo_el_district = lo_nd_district->get_element(  ).
      get single attribute
        lo_el_district->get_attribute(
          EXPORTING
            name =  `DISTRICT_TXT`
          IMPORTING
            value = lv_district_txt ).
    *coding to diplay records when clicking a button(Submit)
    DATA lo_nd_table TYPE REF TO if_wd_context_node.
    DATA lo_el_table TYPE REF TO if_wd_context_element.
    DATA ls_table TYPE wd_this->element_table.
      DATA lv_district LIKE ls_table-district.
    navigate from <CONTEXT> to <TABLE> via lead selection
      lo_nd_table = wd_context->get_child_node( name = wd_this->wdctx_table ).
    get element via lead selection
      lo_el_table = lo_nd_table->get_element(  ).
    get single attribute
      lo_el_table->set_attribute(
        EXPORTING
          name =  `DISTRICT`
       " IMPORTING
          value = lv_district_txt ).
    The above coding updates only one record to that
    table created in view.
    If i enter 2nd district value means then the first record
    in the table is overwritten.
    So my need is the record should not be overwritten.
    it(2nd record ) should be displayed after the 1st record.
    Any one can help me and send the coding plz....

    instead of using set attribute you should use bind table method to display/update the records in table view.
    step1 ) collect all the data in a local table
    step2 ) and the bind that lacal table with your node
    search1 = wd_context->get_child_node( name = `TABLE1` ).
    search1->bind_table( lt_detail)
    here lt_detail is your local table and TABLE1 is node which is bound with table ui element.

  • What's the best way to insert/update thousands records in multiple tables

    Can anyone give an example of how to insert/update thousands records in multiple tables on performance wise? or what should I do to improve the performance?
    Thanks
    jim

    You can see a set of sample applications in various scenarious available at
    http://otn.oracle.com/sample_code/tech/java/sqlj_jdbc/content.html

  • Function module or BAPI that is used to update the records in RBKP table.

    Hello All,
    Can anybody please give me the name of any Function module or BAPI that is used to update the records in RBKP table.
    Please help me
      I need to change the fiscal year in RBKP table
    Thanks in Advance,
    Regards,
    LIJO

    Hi,
    You can use the BAPIs,
    BAPI_ACC_INVOICE_RECEIPT_CHECK Accounting: Check Invoice Receipt (OAG: LOAD PAYABLE)
    BAPI_ACC_INVOICE_RECEIPT_POST  Accounting: Post Invoice Receipt (OAG: LOAD PAYABLE)
    Hope this helps.
    Regards,
    Renjith Michael.

  • Programmatic updating multiple records of a table in ADF

    Hi,
    I am using Jdeveloper : 10g 10.1.3.3
    Problem : I need to update multiple records in DB using ADF feature.
    The senario is like user is shown records of item consisting of item name, item code, category code, price etc. then user clicks "change category code" link availabe against each record. In next page user is shown current code and provided a text box to enter new code. Once i get this in my bean i need to update all records as:
    update item_info set category_code = :new_code where category_code = :current_code. Means to udate category code in all the records where category_code is :current_code.
    I have Entity and View Object for this table.
    How do i update multiple records using created view which is entity based?
    Have A Nice Time!
    Regards,
    Kevin

    In ADF you don't use update statement directly. This is done by the framework.
    You have to search for the records which match your condition category_code = :current_code using your VO based on the entity.
    Then iterate over the result set and change each row to your need setCategoryCode(newCode);
    When you commit the changes they are persist them in the DB.
    To see the changes in the UI you have to update the display using PPR or execute the query again.
    Timo

  • How to update a Z d/b table record from report - urgent

    Dear SDN Team Members,
    I have created a ztable for list of all active customers. 
    This ztable has link with other SAP Standard D/b tables and I need to compare the entries with my ztable. 
    After doing so, I need to update a DATE field (called last_req_date) from the program.
    Until now, i only worked on internal tables and update the fields in internal table.  But this time I need to update my zTable and i've not updated any records of the database tables directly from the program.
    Please kindly provide the complete syntax and procedure on how to update z database table.
    Your help will be appreciated and points will be awarded for the same.
    Thanks in Advance.
    Best Regards!
    Krishna.

    Hi,
    To update or Insert fields into teh dbase table.
    INSERT INTO dbtab [CLIENT SPECIFIED] VALUES wa.
    INSERT INTO (dbtabname) [CLIENT SPECIFIED] VALUES wa.
    2. INSERT dbtab [CLIENT SPECIFIED] FROM TABLE itab. oder
    INSERT (dbtabname) [CLIENT SPECIFIED] FROM TABLE itab.
    3. INSERT dbtab [CLIENT SPECIFIED]. oder
    INSERT *dbtab [CLIENT SPECIFIED]. oder
    INSERT (dbtabname) [CLIENT SPECIFIED] ...
    1.TABLES SCUSTOM.
    SCUSTOM-ID        = '12400177'.
    SCUSTOM-NAME      = 'Robinson'.
    SCUSTOM-POSTCODE  = '69542'.
    SCUSTOM-CITY      = 'Heidelberg'.
    SCUSTOM-CUSTTYPE  = 'P'.
    SCUSTOM-DISCOUNT  = '003'.
    SCUSTOM-TELEPHONE = '01234/56789'.
    INSERT INTO SCUSTOM VALUES SCUSTOM.
    2.TABLES SAIRPORT.
    SAIRPORT-ID   = 'NEW'.
    SAIRPORT-NAME = 'NEWPORT APT'.
    INSERT SAIRPORT.
    To UPDATE
    TABLES SFLIGHT.
    UPDATE SFLIGHT SET   SEATSOCC = SEATSOCC + 3
                   WHERE CARRID   = 'LH'   AND
                         CONNID   = '0400' AND
                         FLDATE   = '19950228'.
    TABLES SFLIGHT.
    UPDATE SFLIGHT CLIENT SPECIFIED
                   SET   SEATSOCC = SEATSOCC + 3
                   WHERE MANDT    = '002'  AND
                   WHERE CARRID   = 'LH'   AND
                         CONNID   = '0400' AND
                         FLDATE   = '19950228'.
    TABLES SCUSTOM.
    SCUSTOM-ID       = '00017777'.
    SCUSTOM-DISCOUNT = '003'.
    UPDATE SCUSTOM.
    OR UPDATE dbtab FROM TABLE itab.

  • How to update nested table records ??

    Hi, I am just starting to write anything in PL/SQL and having some difficulties with basic syntax. Thanks for any help in advance.
    My problem is how to update collection (nested table of objects) with SQL statement. My nested table is not a column of regular table.
    Example:
    CREATE OR REPLACE TYPE tmpRec AS OBJECT(
    Col1 INT,
    Col2 INT
    CREATE OR REPLACE TYPE tmpTable IS TABLE OF tmpRec;
    DECLARE v tmpTable :=
    tmpMBATable(
    tmpRec(1,1),
    tmpRec(2,2),
    tmpRec(3,3),
    BEGIN
    --UPDATE TABLE(CAST(v AS tmpTable)) T SET T.Col2 = 1 WHERE T.Col1 =1;
    --UPDATE TABLE(v) T SET T.Col2 = 12 WHERE T.Col1 =1;
    --UPDATE (SELECT * FROM TABLE(v) )T SET T.Col2 = 12 WHERE T.Col =1;
    END;
    I am getting either
    PL/SQL: ORA-22841: DML is not allowed on PL/SQL Collections
    OR
    PL/SQL: ORA-00903 Bad table name.
    I found there is no problem when collection is a column of DB table (UPDATE TABLE(select collection_column from table) T SET T.Col2 = 12 WHERE T.Col1 =1;) but i want it to be just a collection without storing it in DB, is it possible ?
    Please help.

    898539 wrote:
    Thanks, for fast answer but my problem is more complex, maybe you can show me some workaround i try to use collection but maybe i should do something else...A complex problem does not mean a complex solution. In fact, complex problems should ideally be solved by breaking the complexity down into simpler components and then solving each of these in turn.
    As far as nested tables go? An interesting feature. But one that I will need a lot of convincing and justification for to consider for a production system. There are some major limitations with using nested tables. And these do not exist when using the simpler form of a standard relational child table instead.
    I am migrating from Sybase Adaptive Server Enterprise and searching for sollution for something we used temporary tables for so far.Temporary tables in Sybase are typically used to prevent concurrency issues (readers and writers blocking one another). Thus make a temp copy of the data and do not prevent concurrent access to the source data itself.
    These reasons simply do not exist in Oracle. In most cases, using temporary tables in Oracle simply because that is how it was implemented in Sybase, would be fundamentally flawed.
    Oracle is not Sybase. It does a very poor imitation of Sybase.
    I need a collection that can store some data and I need to be able to use it as a table so I can join to it via SQL query or call some DML on it.Why do you need a collection? The best place for data in Oracle is inside a table. Not inside a collection - especially not if that collection resides in PGA memory in the PL/SQL engine.
    In my store procedure I am updating, deleteing and inserting some data to it depends on context.What context? Oracle supports context namespaces - often used for virtual private database (VPDB) implementations. If you are referring to scope instead - there are a number of ways that Oracle supports scope too.
    The bottom line is that you should not approach this problem with "+how do I convert this Sybase method into an Oracle method+". Instead you need to look at the business requirement that the Sybase method addresses and then determine how best to address that requirement using Oracle.

  • How to only update existing records when loading master data ?

    Hello experts, I need your lights one more time.
    Here is my need :
    I have created an infoobject (IO) which is a very simple version of 0material, let's call it Znewmat --> Znewmat has material type and trademark as attributes, those two fields are available in 2 different datasources :
    - 0MATERIAL_ATTR for material type (field MTART)
    - 0MAT_SALES_ATTR for trademark (field MVGR2)
    When loading my new IO from 0MATERIAL_ATTR I use a filter (at DTP level) to get only a few material types (I get something like 1000 records),
    here is my issue : when I load from 0MAT_SALES_ATTR the field "material type" is not available to keep the same filter as for 0MATERIAL_ATTR and existing records are updated with the trademark, but I also get 5000 records I don't need, and my master data is "polluated" with useless lines.
    *and my question : is there a way while performing the second loading to ONLY UPDATE EXISTING RECORDS AND NOT ADD ANY
    NEW RECORDS ? (i didn't find anything in main options of my DTP)*
    (I'd like to avoid the solution to update the 0MAT_SALES_ATTR datasource to add the missing field)
    Thanks in advance for any help, points will be distributed.
    Guillaume P.
    Still no idea ?

    in the start routine of transformation from 0MAT_SALES_ATTR to znewmat do the following:
    select materials from /BIC/PZNEWMAT into i_mat
    for all entries in source_package where material eq source_package-material.
    loop at source_package.
    p_ind = sy-tabix.
    read table i_mat with key material = source_package-material.
    if sy-subrc ne 0.
    delete i_mat index p_ind.
    endif.
    this way you'll only update records that have previously been loaded by 0MATERIAL_ATTR DS
    loading sequence:
    first load ZNEWMAT from 0MATERIAL_ATTR. then activate ZNEWMAT. then load 0MAT_SALES_ATTR to ZNEWMAT.
    M.

  • Error while updating a record in MS Access

    Im new to coldfusion and am running into a problem while
    trying to update a record in a MS Access table.
    I have a MS Access table where the primary key is a
    auto-number long integer field named jobid.
    I have an edit form where info can be changed then saved. A
    hidden form field named jobid holds the records primary key field
    value for the record being edited. When submitted this is what
    happens:
    I use a basic SQL UPDATE statement but I get the error "Data
    type mismatch in criteria expression"
    Some code:
    <cfset nJobId=Int(Val(FORM.jobid))>
    *dont know if i need the above line but using #FORM.jobid#
    in the WHERE clause below didnt work either
    <cfquery datasource="lrs">
    UPDATE jobs SET
    status='#FORM.status#',
    offer='#FORM.offer#',
    postdate="#CreateODBCDate(FORM.postdate)#",
    jobtype=#FORM.jobtype#,
    jobtitle='#FORM.jobtitle#',
    ..etc...
    WHERE jobid=#nJobId#
    The WHERE clause is where the error occurs with "Data type
    mismatch in criteria expression"
    After a few times with that i changed the where clause to
    simply "WHERE jobid=1" as this record id does exist, but it has the
    same error.
    I then tried changing the where clause to
    WHERE jobid=<cfqueryparam cfsqltype="cf_sql_bigint"
    value="#FORM.jobid#">
    and there it "appears" to work, but the record is not
    actually updated. No changes are made to the table though no error
    is thrown.
    Im missing something here... why wont the record update
    ?

    The data type mismatch isn't necessarily in your where
    clause. I'm guessing that it's the quotes around the create
    odbcdate function.
    use of cfqueryparam will solve a lot of these problems for
    you.

  • Getting timeout error while updating a record from c#

    Hi,
    I have around 30k records in a tables. When I update that record inside the Transaction (Enterprise Data Library, c#) , it takes long time and throws timeout error.
    But I am able to update the same record via Toad.
    In the morning I tried same updating the record, it works without any change in the code or script.+
    is it due table lock or db related issue? please adivse, how to resolve if occurs again.
    anand

    Code:
    private static void Save()
    using (DBTransactionManager dbTransactionManager = new DBTransactionManager())
    try
    DataTableDAL.Instance.ExecuteDML("Update Voyage SET BallastBonus = 30000 WHERE ID = 'AE53B610BEA743EC8AFBAED0C8349BF8';");
    //commit database
    dbTransactionManager.Commit();
    catch
    dbTransactionManager.RollBack();
    throw;
    Table
    Column Name     ID     Pk     Null?     Data Type     Default     Histogram     Encryption Alg     Salt
    ID     1     1     N     NVARCHAR2 (32)          None          
    CALCNUMBER     2          N     NUMBER (10)          None          
    CURRENCYID     3          N     NVARCHAR2 (32)          Frequency          
    CALCTYPE     4          N     NUMBER (5)          Frequency          
    ESTIMATEDESCRIPTION     5          Y     NVARCHAR2 (200)          None          
    ESTIMATEGROUPDESCRIPTION     6          Y     NVARCHAR2 (200)          None          
    BALLASTBONUS     7          Y     NUMBER (12,2)          None          
    BALLASTBONUSCOMMPCT     8          Y     NUMBER (6,3)          None          
    ISESTIMATE     9          N     NUMBER (1)          None          
    ADDITIONALSTEAMVALUE     10          Y     NUMBER (8,4)          None          
    ISADDITIONALSTEAMPCT     11          Y     NUMBER (1)          None          
    ADDITIONALPORTVALUE     12          Y     NUMBER (8,4)          None          
    ISADDITIONALPORTPCT     13          Y     NUMBER (1)          None          
    CREATEDBY     14          N     NVARCHAR2 (32)          Frequency          
    CREATEDDATE     15          N     DATE          None          
    UPDATEDBY     16          Y     NVARCHAR2 (32)          None          
    UPDATEDDATE     17          Y     DATE          None          
    LUMPSUMCARGOCOST     18          Y     NUMBER (1)          None          
    BUNKERPRICEMETHOD     19          Y     VARCHAR2 (30 Byte)          None          
    INCCONTCALCRESULT     20          Y     NUMBER (1)          None          
    FINAL_EST     21          Y     NUMBER          None          
    SPOT_VOYAGE     22          Y     NUMBER (1)          None          
    ISRUNCOSTEDIT     23          Y     NUMBER (1)          None          
    Index
    Table doesnt have any index, except primary key index.
    Total Records
    35,000
    Hope this input might sufficient to help me.

  • Associative array two variable comparison :update table error

    Hi,
    i am using associative array to update the version number of table
    -i declare two associative array to compare the column from two table (temp,main tables)values in loop
    -if id's of both variable(for temp and main table) are equal and column of either of table not matching then it should update the version no of temp table
    -if id's not equal i.e record only exists temp table then update null version number annd increment it by 1
    -following is the structure and procedure --it shows the matching and non matching records but for the update statement it not giving expected output i.e it updates all records irrespective of the condition provided
    -i tried to put condition in update as well as in the  if statement but it updates all record
    ....suggestion and help highly appreciate. thankx in advance !!!
    /*--table structure and data--*/
    CREATE TABLE "TEMP_TABLE"
       ( "ID" NUMBER NOT NULL ENABLE,
      "COL1" VARCHAR2(20 BYTE),
      "COL2" VARCHAR2(20 BYTE),
      "VERSION" NUMBER
       INSERT INTO TEMP_TABLE VALUES (101,'A','B',NULL);
       INSERT INTO TEMP_TABLE VALUES (102,'x','y',NULL);
       INSERT INTO TEMP_TABLE VALUES (103,'r','t',NULL);
       CREATE TABLE "MAIN_TABLE"
       ( "ID" NUMBER NOT NULL ENABLE,
      "COL1" VARCHAR2(20 BYTE),
      "COL2" VARCHAR2(20 BYTE),
      "VERSION" NUMBER
       INSERT INTO MAIN_TABLE VALUES (101,'A','B',1);
    /*------update version procedure----------*/
    DECLARE
      TYPE T_tmp_table IS TABLE OF tmp_table %ROWTYPE INDEX BY PLS_INTEGER;
      TYPE T_main_table IS TABLE OF main_table%ROWTYPE INDEX BY PLS_INTEGER;
      l_tmp_table T_tmp_table;
      l_main_table T_main_table;
      BEGIN
        SELECT * BULK COLLECT INTO l_tmp_table FROM tmp_table;
        SELECT * BULK COLLECT INTO l_main_table FROM main_table;
        FOR i IN 1 .. l_tmp_table.count
        LOOP
          FOR j IN 1 .. l_main_table.count
         LOOP
      if(l_tmp_table(i).ID = l_main_table(j).ID AND l_tmp_table(i).VERSION IS NULL) then     
      ---this first if loop updates temp table version irrespective of l_tmp_table.ID=l_main_table.ID orl_tmp_table. ID<>l_main_table.ID  .it display proper matching and non-matching records.
       dbms_output.put_line('matching ids from tmp and main are :'||l_tmp_table(i).ID||'  '||l_main_table(j).ID);
       UPDATE tmp_table SET VERSION = l_tmp_table(i).version +1;
       --where l_tmp_table(i).ID = l_main_table(j).ID     --
       end if;
      if (l_tmp_table(i).ID <> l_main_table(j).ID) then
       dbms_output.put_line('non matching ids from tmp and main are :'||l_tmp_table(i).ID||'  '||l_main_table(j).ID);
       UPDATE tmp_table SET VERSION = l_tmp_table(i).version +1;
       --where l_tmp_table(i).ID <> l_main_table(j).ID    
        end if;
              END LOOP;
              END LOOP;
        EXCEPTION
        WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('OTHER');
    END;

    Hello user8937641
    I think there is a problem with the logic of your SQL-Code.
    But maybe in this formatted structure you can see where your problem is. -> I can not say it because I do not know what is the requirement.
    I hope it helps...
    /*------update version procedure----------*/
    DECLARE
      TYPE T_tmp_table IS TABLE OF tmp_table %ROWTYPE INDEX BY PLS_INTEGER;
      TYPE T_main_table IS TABLE OF main_table%ROWTYPE INDEX BY PLS_INTEGER;
      l_tmp_table T_tmp_table;
      l_main_table T_main_table;
      BEGIN
        SELECT * BULK COLLECT INTO l_tmp_table FROM tmp_table;
        SELECT * BULK COLLECT INTO l_main_table FROM main_table;
        FOR i IN 1 .. l_tmp_table.count
        LOOP
          FOR j IN 1 .. l_main_table.count
          LOOP
            IF     l_tmp_table(i).ID = l_main_table(j).ID
               AND l_tmp_table(i).VERSION IS NULL
             THEN
                 ---this first if loop updates temp table version irrespective of l_tmp_table.ID=l_main_table.ID orl_tmp_table. ID<>l_main_table.ID  .it display proper matching and non-matching records.
                 dbms_output.put_line('matching ids from tmp and main are :'||l_tmp_table(i).ID||'  '||l_main_table(j).ID);
                 UPDATE tmp_table
                    SET version = l_tmp_table(i).version +1;
                  WHERE id = l_tmp_table(i).ID
            END IF;
            IF l_tmp_table(i).ID <> l_main_table(j).ID
             THEN
               dbms_output.put_line('non matching ids from tmp and main are :'||l_tmp_table(i).ID||'  '||l_main_table(j).ID);
               -- Maybe you do not need this update:
               UPDATE tmp_table
                  SET version = l_tmp_table(i).version +1;
                WHERE id =  l_tmp_table(i).ID
            END IF;
            COMMIT;
           END LOOP;
        END LOOP;
      EXCEPTION WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error at Executing the PLSQL-Block - ' || SQLERRM);
    END;

  • Update New Records is taking much time to complete. How to reduce

    Hi,
    Iam having a Table with 200 Clumns and trying to Update 5 columns and the table has 5lakh Records. It is taking very much time 2hours to complete. Pls let me know why is this taking time how to reduce....
    In my ssis Package iam using
    Oracle Source
    Look up
    Oledb Command for the Update.
    Please help ism stuck?

    I have somthing like this..
    Update table
    Set column1 =@column1, column2=@column2,column3=@column3,column4=@column4,column5=@column5
    where column1=@column1
    in this case i need to add a index on column1 right? Pls llet me know
    Yes, an index in column1 (preferably clustered) would avoid the table scan for each update. The ELT the staging table alternative Jim suggested will likely perform better than individual updates for a large process like this.
    Dan Guzman, SQL Server MVP, http://www.dbdelta.com

Maybe you are looking for