Updating rows of multiple tables

This should be very simple..I'm missing out on something...I just want to update a row in each of the tables taking values from a master array..I spent a lot of time on this just bot able to get this right...
the funny thing is it updates the table 1 and not the rest of the tables...
If initialization is wrong, then the firsttable should not be updated aswell..
thanks a lot
Palkin
Attachments:
multable.vi ‏47 KB

Hi,
It is updating all the tables. Just enable vertical scroll bar to see your table values.
Thanks,
Sanad MM

Similar Messages

  • Deleting Multiple Rows From Multiple Tables As an APEX Process

    Hi There,
    I'm interesting in hearing best practice approaches for deleting multiple rows from multiple tables from a single button click in an APEX application. I'm using 3.0.1.008
    On my APEX page I have a Select list displaying all the Payments made and a user can view individual payments by selecting a Payment from the Select List (individual items are displayed below using Text Field (Disabled, saves state) items with a source of Database Column).
    A Payment is to be deleted by selecting a custom image (Delete Payments Button) displayed in a Vertical Images List on the same page. The Target is set as the same page and I gave the Request a name of DELETEPAY.
    What I tried to implement was creating a Conditional Process On Submit - After Computations and Validations that has a source of a PL/SQL anonymous block as follows:
    BEGIN
    UPDATE tblDebitNotes d
    SET d.Paid = 0
    WHERE 1=1
    AND d.DebitNoteID = :P7_DEBITNOTEID;
    INSERT INTO tblDeletedPayments
    ( PaymentID,
    DebitNoteID,
    Amount,
    Date_A,
    SupplierRef,
    Description
    VALUES
    ( :P7_PAYMENTID,
    :P7_DEBITNOTEID,
    :P7_PAID,
    SYSDATE,
    :P7_SUPPLIERREF,
    :P7_DESCRIPTION
    DELETE FROM tblPayments
    WHERE 1=1
    AND PaymentID = :P7_PAYMENTID;
    END;
    The Condition Type used was Request = Expression 1 where Expression 1 had a value of DELETEPAY
    However this process is not doing anything!! Any insights greatly appreciated.
    Many thanks,
    Gary.

    ...the "button" is using a page level Target,...
    I'm not sure what that means. If the target is specified in the definition of a list item, then clicking on the image will simply redirect to that URL. You must cause the page to be submitted instead, perhaps by making the URL a reference to the javaScript doSubmit function that is part of the standard library shipped with Application Express. Take a look at a Standard Tab on a sample application and see how it submits the page using doSubmit() and emulate that.
    Scott

  • Update Row into Run Table Task is not executing in correct sequence in DAC

    Update Row into Run Table Task is not executing in correct sequence in DAC.
    The task phase for this task is "Post Lost" . The depth in the execution plan is 19 but this task is running some times in Depth 12, some times in 14 and some time in Depth 16. Would like to know is this sequence of execution is correct order or not? In the out of the Box this task is executed at the end of the entire load. No Errors were reported in DAC log.
    Please let me know if any documents that would highlight this issue
    rm

    Update into Run table is a task thats required to update a table called W_ETL_RUN_S. The whole intention of this table is to keep the poor mans run history on the warehouse itself. The actual run history is stored in the DAC runtime tables, however the DAC repository could be on some other database/schema other than warehouse. Its mostly a legacy table, thats being carried around. If one were to pay close attention to this task, it has phase dependencies defined that dictate when this task should run.
    Apologies in advance for a lengthy post.... But sure might help understanding how DAC behaves! And is going to be essential for you to find issues at hand.
    The dependency generation in DAC follows the following rules of thumb!
    - Considers the Source table target table definitions of the tasks. With this information the tasks that write to a table take precedence over the tasks that reads from a table.
    - Considers the phase information. With this information, it will be able to resolve some of the conflicts. Should multiple tasks write to the same table, the phase is used to appropriately stagger them.
    - Considers the truncate table option. Should there be multiple tasks that write to the same table with the same phase information, the task that truncates the table takes precedence.
    - When more than one task that needs to write to the table that have similar properties, DAC would stagger them. However if one feels that either they can all go in parallel, or a common truncate is desired prior to any of the tasks execution, one could use a task group.
    - Task group is also handy when you suspect the application logic dictates cyclical reads and writes. For example, Task 1 reads from A and writes to B. Task 2 reads from B and writes back to A. If these two tasks were to have different phases, DAC would be able to figure that out and order them accordingly. If not, for example those tasks need to be of the same phase for some reason, one could create a task group as well.
    Now that I described the behavior of how the dependency generation works, there may be some tasks that have no relevance to other tasks either as source tables or target tables. The update into run history is a classic example. The purpose of this task is to update the run information in the W_ETL_RUN_S with status 'Completed' with an end time stamp. Because this needs to run at the end, it has phase dependency defined on it. With this information DAC will be able to stagger the position of execution either before (Block) or after (Wait) all the tasks belonging to a particular phase is completed.
    Now a description about depth. While Depth gives an indication to the order of execution, its only an indication of how the tasks may be executed. Its a reflection of how the dependencies have been discovered. Let me explain with an example. The tasks that have no dependency will have a depth of 0. The tasks that depend on one or more or all of depth 0 get a depth of 1. The tasks that depend on one or more or all of depth 1 get a depth of 2. It also means implicitly a task of depth 2 will indirectly depend on a task of depth 0 through other tasks in depth 1. In essence the dependencies translate to an execution graph, and is different from the batch structures one usually thinks of when it comes to ETL execution.
    Because DAC does runtime optimization in the order in which tasks are executed, it may pick a task thats of order 1 over something else with an order of 0. The factors considered for picking the next best task to run depend on
    - The number of dependent tasks. For example, a task which has 10 dependents gets more priorty than the one whose dependents is 1.
    - If all else equal, it considers the number of source tables. For example a task having 10 source tables gets more priority than the one that has only two source tables.
    - If all else equal, it considers the average time taken by each of the tasks. The longer running ones will get more preference than the quick running ones
    - and many other factors!
    And of course the dependencies are honored through the execution. Unless all the predecessors of a task are in completed state a task does not get picked for execution.
    Another way to think of this depth concept : If one were to execute one task at a time, probably this is the order in which the tasks will be executed.
    The depth can change depending on the number of tasks identified for the execution plan.
    The immediate predecessors and successor can be a very valuable information to look at and should be used to validate the design. All predecessors and successors provide information to corroborate it even further. This can be accessed through clicking on any task and choosing the detail button. You will see all these information over there. As an alternate method, you could also use the 'All/immediate Predecessors' and 'All/immediate Successor' tabs that provide a flat view of the dependencies. Note that these tabs may have to retrieve a large amount of data, and hence will open in a query mode.
    SUMMARY: Irrespective of the depth, validate
    - if this task has 'Phase dependencies' that span all the ETL phases and has a 'Wait' option.
    - click on the particular task and verify if the task does not have any successors. And the predecessors include all the tasks from all the phases its supposed to wait for!
    Once you have inspected the above two you should be good to go, no matter what the depth says!
    Hope this helps!

  • How to update fields in multiple tables ?

    Dear all,
    What is the fastest way to update fields in multiple tables... from a single change table...as below is my code to update the fields but it is taking long time to update as i need to keep log file if any one update fails....
    CREATE OR REPLACE
    package body DO_DC_NAME_UPDATE_OTHER_TAB
    as
    type rowidArray is table of rowid index by binary_integer;
    type custRec is record
    n_cust_ref_no dbms_sql.number_table,
    v_name dbms_sql.varchar2_table,
    v_name_chg dbms_sql.varchar2_table,
    rowid rowidArray,
    changed dbms_sql.varchar2_table
    procedure VALIDATE_CUST_NAME( p_n_cust_ref_no in number,p_v_name_chg in out NOCOPY varchar2, p_changed in out NOCOPY varchar2 )
    is
    begin
    FOR cr_cust IN (SELECT --a.n_cust_ref_no,a.v_name,UPD_V_NAME, a.n_weight,a.V_LASTUPD_INFTIM
    from GNMT_CUSTOMER_MASTER_CHG where n_cust_ref_no=p_n_cust_ref_no)
         loop
    -- v_name
    if nvl(trim(cr_cust.v_name),0) != nvl(p_v_name_chg,0)
    then
              p_v_name_chg := p_v_name_chg;
              --p_v_name := p_v_name;
              p_changed := 'Y';
    end if;
         end loop;
    end;
    procedure DO_NAME_UPDATE_OTHER_TAB
    is
    l_record custRec;
    l_array_size number default 20000;
    l_done boolean;
    l_cnt number default 1;
    cursor c is select a.n_cust_ref_no, a.v_name,a.v_name_chg, a.rowid, 'N'
                        from GNMT_CUSTOMER_MASTER_CHG a--,GNMT_CUSTOMER_MASTER b
                        where a.v_name <> trim(a.v_name_chg); --and  a.n_cust_ref_no in (1434775,1561181,1601870);
    begin
    open c;
    loop
    dbms_application_info.set_client_info
    ( 'processing ' || l_cnt || ' thru ' || (l_cnt+l_array_size-1) );
    fetch c bulk collect into l_record.n_cust_ref_no, l_record.v_name,l_record.v_name_chg,l_record.rowid, l_record.changed
    LIMIT l_array_size;
    l_done := c%notfound;
    --dbms_output.put_line ('message10');
    for i in 1 .. l_record.n_cust_ref_no.count
    loop
    VALIDATE_CUST_NAME(l_record.n_cust_ref_no(i),l_record.v_name_chg(i),l_record.changed(i) );
    end loop;
    --dbms_output.put_line (l_record.n_cust_ref_no(i)||','||l_record.V_OCCUP_CODE(i)||','||l_record.CHANGED(i));
    /*forall i in 1 .. l_record.n_cust_ref_no.count
    update GNMT_CUSTOMER_MASTER q
    set q.v_name = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.v_name) = l_record.v_name(i)
    and l_record.changed(i) = 'Y';*/
    -- update v_name in all the related tables
    forall i in 1 .. l_record.n_cust_ref_no.count
    update ADE_CUSTOMER_MASTER q
    set q.v_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.v_name) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update GNMT_POLICY_DETAIL q
    set q.v_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.v_name) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update GNMT_QUOTATION_DETAIL q
    set q.v_NAME =l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.v_name) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update NBDT_BENEFICIARY q
    set q.V_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.V_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update PSDT_NOMINATION_TRANSACTION q
    set q.V_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.V_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update PSMT_POLICY_BENEFICIARY q
    set q.V_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.V_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    commit;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update PSMT_POLICY_TRUSTEE q
    set q.V_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.V_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update PSMT_QUOTATION_BENEFICIARY q
    set q.V_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.V_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update PSMT_QUOTATION_TRUSTEE q
    set q.V_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.V_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_NAME is not null;
    commit;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update GNDT_BLACKLIST_DETAIL q
    set q.v_FNAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.v_FNAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_FNAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update INDT_LIAM_DETAIL q
    set q.v_FNAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.v_FNAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.v_FNAME is not null;
    commit;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update GNMT_POLICY q
    set q.V_PAYER_NAME = l_record.v_name_chg(i)
    where q.N_PAYER_REF_NO = l_record.n_cust_ref_no(i)
    and trim(q.V_PAYER_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.V_PAYER_NAME is not null;
    commit;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update GNMT_QUOTATION q
    set q.V_PAYER_NAME = l_record.v_name_chg(i)
    where q.N_PAYER_REF_NO = l_record.n_cust_ref_no(i)
    and trim(q.V_PAYER_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.V_PAYER_NAME is not null;
    commit;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update GNMT_QUOTATION q
    set q.V_PROPOSER_NAME = l_record.v_name_chg(i)
    where q.N_PROPOSER_REF_NO = l_record.n_cust_ref_no(i)
    and trim(q.V_PROPOSER_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.V_PROPOSER_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update GNMT_POLICY q
    set q.V_PROPOSER_NAME = l_record.v_name_chg(i)
    where q.N_PROPOSER_REF_NO = l_record.n_cust_ref_no(i)
    and trim(q.V_PROPOSER_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.V_PROPOSER_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update CLMT_CLAIM_MASTER q
    set q.V_CLIENT_NAME = l_record.v_name_chg(i)
    where q.N_CLIENT_REF_NO = l_record.n_cust_ref_no(i)
    and trim(q.V_CLIENT_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.V_CLIENT_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update CLMT_CLAIM_MASTER q
    set q.V_INTIMATOR_NAME = l_record.v_name_chg(i)
    where q.N_CLIENT_REF_NO = l_record.n_cust_ref_no(i)
    and trim(q.V_INTIMATOR_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.V_INTIMATOR_NAME is not null;
    forall i in 1 .. l_record.n_cust_ref_no.count
    update PYMT_VOU_MASTER q
    set q.V_PAYEE_NAME = l_record.v_name_chg(i)
    where q.n_cust_ref_no = l_record.n_cust_ref_no(i)
    and trim(q.V_PAYEE_NAME) = l_record.v_name(i)
    and l_record.changed(i) = 'Y'
    and q.V_PAYEE_NAME is not null;
    /*forall i in 1 .. l_record.n_cust_ref_no.count
         INSERT INTO GNMT_CUSTOMER_MASTER_LOG
              (N_CUST_REF_NO, V_TITLE_CODE, V_NAME, D_BIRTH_DATE, V_SEX, V_RELIGION_CODE, V_NATION_CODE, V_OCCUP_CODE, V_ALIVE, V_SMOKER,
              N_NO_STICKS, D_DEATH_DATE, V_BUMI_NON_BUMI, V_AGE_ADMITTED, V_SHORT_NAME, V_FIRST_NAME, V_LAST_NAME, V_EMAIL, V_DESIGNATION,
              N_HEIGHT,N_WEIGHT,V_TITLE_CODE_CHG, V_NAME_CHG, D_BIRTH_DATE_CHG, V_SEX_CHG,V_RELIGION_CODE_CHG,V_NATION_CODE_CHG, V_OCCUP_CODE_CHG, V_ALIVE_CHG,
              V_SMOKER_CHG, N_NO_STICKS_CHG, D_DEATH_DATE_CHG,V_BUMI_NON_BUMI_CHG, V_AGE_ADMITTED_CHG, V_SHORT_NAME_Chg, V_FIRST_NAME_Chg,
              V_LAST_NAME_Chg, V_EMAIL_Chg, V_DESIGNATION_Chg,N_HEIGHT_Chg,N_WEIGHT_Chg, V_UPD_STATUS_DC,-- V_LASTUPD_PROG, V_LASTUPD_INFTIM,
              V_LASTUPD_USER_DC, V_LASTUPD_PROG_DC,V_LASTUPD_INFTIM_DC
              SELECT N_CUST_REF_NO, V_TITLE_CODE, V_NAME, D_BIRTH_DATE, V_SEX, V_RELIGION_CODE, V_NATION_CODE, V_OCCUP_CODE, V_ALIVE, V_SMOKER,
              N_NO_STICKS, D_DEATH_DATE, V_BUMI_NON_BUMI, V_AGE_ADMITTED, V_SHORT_NAME, V_FIRST_NAME, V_LAST_NAME, V_EMAIL, V_DESIGNATION,
              N_HEIGHT,N_WEIGHT,V_TITLE_CODE_CHG, V_NAME_CHG, d_birth_date_chg, V_SEX_CHG, V_RELIGION_CODE_CHG,V_NATION_CODE_CHG, V_OCCUP_CODE_CHG, V_ALIVE_CHG,
              V_SMOKER_CHG, N_NO_STICKS_CHG, D_DEATH_DATE_CHG, V_BUMI_NON_BUMI_CHG, V_AGE_ADMITTED_CHG, V_SHORT_NAME_Chg, V_FIRST_NAME_Chg,
              V_LAST_NAME_Chg, V_EMAIL_Chg, V_DESIGNATION_Chg,N_HEIGHT_Chg,N_WEIGHT_Chg--, V_LASTUPD_USER, V_LASTUPD_PROG, V_LASTUPD_INFTIM
              ,'PROCESSED'
              ,user,--P_USER,
              'DC_PAKAGE',
              sysdate--P_DATE
              FROM GNMT_CUSTOMER_MASTER_CHG where n_cust_ref_no =l_record.n_cust_ref_no(i)
              --and n_cust_ref_no not in (select n_cust_ref_no from GNMT_CUSTOMER_MASTER_LOG);*/
    exit when (l_done);
    l_cnt := l_cnt + l_array_size;
    end loop;
    commit;
    end;
    end;
    thank You

    Dear SeánMacGC thanks for reply,
    But "a.changed" is not a field in GNMT_CUSTOMER_MASTER_CHG. what i am doing in this procedure is i am collecting bulck data and validating field by field from GNMT_CUSTOMER_MASTER_CHG with GNMT_CUSTOMER_MASTER table as their structure is same.. if v_name is not same as v_name_chg then i am setting changed flag to "Y" changed is "changed dbms_sql.varchar2_table" and updating GNMT_CUSTOMER_MASTER in bluck where changed flag ='Y'...
    type custRec is record
    n_cust_ref_no dbms_sql.number_table,
    v_name dbms_sql.varchar2_table,
    v_name_chg dbms_sql.varchar2_table,
    rowid rowidArray,
    *changed dbms_sql.varchar2_table*
    i cannot use simple SQL as i need to validate field for each records with GNMT_CUSTOMER_MASTER_CHG and insert into log file as well.....
    to run this procedure:
    execute DO_DC_NAME_UPDATE_OTHER_TAB.DO_NAME_UPDATE_OTHER_TAB;
    Thanks...

  • How can i update rows  in a table based on a match from a select query

    Hello
    How can i update rows in a table based on a match from a select query fron two other tables with a update using sqlplus ?
    Thanks Glenn
    table1
    attribute1 varchar2 (10)
    attribute2 varchar2 (10)
    processed varchar2 (10)
    table2
    attribute1 varchar2 (10)
    table3
    attribute2 varchar2 (10)
    An example:
    set table1.processed = "Y"
    where (table1.attribute1 = table2.attribute1)
    and (table1.attribute2 = table3.attribute2)

    Hi,
    Etbin wrote:
    Hi, Frank
    taking nulls into account, what if some attributes are null ;) then the query should look like
    NOT TESTED !
    update table1 t1
    set processed = 'Y'
    where exists(select null
    from table2
    where lnnvl(attribute1 != t1.attribute1)
    and exists(select null
    from table3
    where lnnvl(attribute2 != t1.attribute2)
    and processed != 'Y'Regards
    EtbinYes, you could do that. OP specifically requested something else:
    wgdoig wrote:
    set table1.processed = "Y"
    where (table1.attribute1 = table2.attribute1)
    and (table1.attribute2 = table3.attribute2)This WHERE clause won't be TRUE if any of the 4 attribute columns are NULL. It's debatable about what should be done when those columns are NULL.
    But there is no argument about what needs to be done when processed is NULL.
    OP didn't specifically say that the UPDATEshould or shouldn't be done on rows where processed was already 'Y'. You (quite rightly) introduced a condition that would prevent redo from being generated and triggers from firing unnecessarily; I'm just saying that we have to be careful that the same condition doesn't keep the row from being UPDATEd when it is necessary.

  • How to update flag in multiple tables using custom sql DB adapter

    hi all,
    I have a scenario: I want to update flags in multiple tables in DB2. I have used toplink update only to update all tabless after creating relationships between them. But that approach is not working as it couldnot detect emmisions with DB2 and update the complete record with blank values in other columns.
    So, i want to use custom sql now. Can anybody help in resolving the issue or in writing the custom sql.
    Regards
    Richa

    Dear SeánMacGC thanks for reply,
    But "a.changed" is not a field in GNMT_CUSTOMER_MASTER_CHG. what i am doing in this procedure is i am collecting bulck data and validating field by field from GNMT_CUSTOMER_MASTER_CHG with GNMT_CUSTOMER_MASTER table as their structure is same.. if v_name is not same as v_name_chg then i am setting changed flag to "Y" changed is "changed dbms_sql.varchar2_table" and updating GNMT_CUSTOMER_MASTER in bluck where changed flag ='Y'...
    type custRec is record
    n_cust_ref_no dbms_sql.number_table,
    v_name dbms_sql.varchar2_table,
    v_name_chg dbms_sql.varchar2_table,
    rowid rowidArray,
    *changed dbms_sql.varchar2_table*
    i cannot use simple SQL as i need to validate field for each records with GNMT_CUSTOMER_MASTER_CHG and insert into log file as well.....
    to run this procedure:
    execute DO_DC_NAME_UPDATE_OTHER_TAB.DO_NAME_UPDATE_OTHER_TAB;
    Thanks...

  • How to find newly updated rows in a table

    Hi..
    How to know newly updated rows in a table.
    Thanks in advance
    pal

    Or other good thing would be to add LAST_UPDATED column to your table, that can reflect the time the row gets updated.
    G

  • Update row in a table based on join on multiple rows in another table

    I am using SQL Server 2005. I have the following update query which is not working as desired.
    UPDATE DocPlant
    SET DocHistory = DocHistory + CONVERT(VARCHAR(20), PA.ActionDate, 100) + ' - ' + PA.ActionLog + '. '
    FROM PlantDoc PD INNER JOIN PlantAction PA on PD.DocID = PA.DocID AND PD.PlantID = PA.PlantID 
    For each DocID and PlantID in PlantDoc table there are multiple rows in PlantAction table. I would like to concatenate ActionDate and ActionLog information into DocHistory column of DocPlant table. But the above update query is considering only one row from
    PlantAction table even though there are multiple rows that match with DocID and PlantID.
    DocHistory column is of type NVARCHAR(MAX).
    How do I fix my query to achieve what I want ? Thanks for the help.

    UPDATE DocPlant
    SET DocHistory = DocHistory + CONVERT(VARCHAR(20), PA.ActionDate, 100) + ' - ' + PA.ActionLog + '. '
    FROM PlantDoc PD INNER JOIN PlantAction PA on PD.DocID = PA.DocID AND PD.PlantID = PA.PlantID 
    We do not use the old Sybase UPDATE..FROM.. syntax. Google it and learn how it does not work. We do not use the old Sybase CONVERT() string function. You are still writing 1950's COBOL with string dates instead of temeproal data types. 
    You also did not post DDL, so we have to guess about everything. Does your boss make you work without DDL? How do you do it? 
    >> For each DocID and PlantID in PlantDoc table there are multiple rows in PlantAction [singular name?] table. I would like to concatenate ActionDate and ActionLog information into DocHistory column of DocPlant table. <<
    Why? What does this new data element mean? This is like dividing Thursday by Red and expecting a reasonable answer. Now, non-SQL programmers who are still writing COBOL will violate the tiered architecture rule about doing display formatting in the database.
    If you will follow forum rules, we can help you. 
    --CELKO-- Books in Celko Series for Morgan-Kaufmann Publishing: Analytics and OLAP in SQL / Data and Databases: Concepts in Practice Data / Measurements and Standards in SQL SQL for Smarties / SQL Programming Style / SQL Puzzles and Answers / Thinking
    in Sets / Trees and Hierarchies in SQL

  • How to find  latest updating row in a table

    Hi
    How to find latest updating row in a table

    ADF 7 wrote:
    SELECT *  FROM Table WHERE lastupdTimestamp = (SELECT MAX(lastupdTimestamp) FROM Table)lastupdtimestamp - holds and date an time of an records when it last updation takes place in table.
    lastupdtimestamp is a column in my table.And how will this make sense in the scenario I've described, where UserA does an update before UserB, but commits the update after UserB's commited update? And add UserC and UserD and a 1000 more users to this scenario where concurrent updates happen.
    What actual time does this lastupdtimestamp contain and represent? And why? How is that lastupdtimestamp used in business logic and processing? Or is it just a silly-bugger-let's-add-somekind-of-time column to that table that essentially meaningless?
    Not saying that one should never add such a timestamp based column. Simply that one needs to understand WHAT it contains and it needs to be SENSIBLY used within the data model.
    However, in my experience such columns are often slapped on afterwards, never featured in the actual data model designed, and is then used without a second though that the database and its data is a multi-user and multi-process system. And things happen at the same time. And things overlap (serialisation is the exception - not the rule).

  • How to find latest updated row in a table

    Hi
    Here I have command that display updated time.But I Need which row was lastly updated (show particular row) in that table.
    select scn_to_timestamp(max(ora_rowscn))
    from employee;

    First of all, SCN to timestamp mapping exists for a short period of time, so if change is relatively old you'll get ORA-08181:
    SQL> select max(ora_rowscn) from emp;
    MAX(ORA_ROWSCN)
           22622685
    SQL> select scn_to_timestamp(max(ora_rowscn)) from emp;
    select scn_to_timestamp(max(ora_rowscn)) from emp
    ERROR at line 1:
    ORA-08181: specified number is not a valid system change number
    ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1
    SQL> Anyway, based on SCN we can find out which BATCH of table row modifications was committed last. But you can't find out which modification withing that BATCH was made last.
    SY.

  • Remove a row from multiple tables

    Hello,
    I have a form that has what appears to be one table.  Since I needed 30 columns (29 of them are single character fields) I had to use 2 table objects.  Then I needed the ability to add and remove rows.  Adding a row at the end is easy enough.  Deleting a specific row is the problem.  At the moment, I added a third table which has a header row and a item body row.  the body row is a button with the intention of removing that entire row from the large table.  This means it needs to remove the row from all 3 tables.
    My structure is:
    form1
    (Some other flowed subform that doesn't matter for us)
    SubformPersonnel (a flowed subform)
    SubformHeader (a positioned subform)
    TextOverallHeader (text to label the oeverall 3 tables)
    ButtonAddRow (adds a row to the end of all 3 tables)
    SubformPersonnelTable (a positioned subform)
    ContractorTableRemove (a table with 1 column for the Remove button)
    HeaderRow (A hidden row to align the table with the other 2)
    Item (A row with the Remove button)CellRemoveButton (the cell with the remove button and associated JavaScript)
    ContractorTableLeft (a table with the left 15 printed columns)
    HeaderRow
    Contractor (A row of data to be removed when CellButton above is clicked)
    ContractorTableRight (a table with the right 15 printed columns)
    HeaderRow
    Contractor (A row of data to be removed when CellButton above is clicked)
    (Some other flowed subforms that I am not worried about at the moment)
    The 3 tables are aligned so the headers all line up, with no spaces between them.  The body rows then line up and this looks like one large table.  From left to right, they are:
    ContractorTableRemove, ContractorTableLeft, ContractorTableRight
    So Item and Contractor rows are added when ButtonAddRow is clicked in the overall header.  The intial count is set to 8 for each table, so I get 8 rows at startup. The minimum count is set to 1 for each.  I know that each row of each table has the same index number because I filled those into a cell in each table durig the cell's initialize.  This line, in the CellRemoveButton's click event deletes that cell's row in that table:
    this.parent.parent._Item.removeInstance(this.parent.index);
    I have tried all sorts of ways to delete the same row (using same index #) in the other 2 tables: ContractorTableLeft and ContractorTableRight, but don't seem to be getting the correct syntax correct.  I have tried hard coding the references, using .parent as shown below, and also tried using an index of 1 just to try deleting a row with no results.
         this.parent.parent.parent.ContractorTableLeft._Contractor.removeInstance(this.parent.inde x);
    Can someone get me the correct syntax here?
    I have seen examples of putting a hidden delete button on each table and clicking that, but I am concerned that it will get in the way of the tables on either side of the table it is in.  I reeally want to just reference the row and remove it so I can avoid any problems these additional delete problems may cause.
    I have copied the form to https://acrobat.com/#d=7M8R50rEHf4AaVXppwyKLw

    Thank you, Niall.  Much appreciated!
    The Delete button was more to make sure one could delete these outside a button in the actual row and I see I had the index wrong such that I was deleting the second row and not the first.  I had toyed with using this as a hidden button if I could pass the index to the event's function.
    I had not thought of adding the reference to each row as a variable.  It seems to work very well.
    For future reference to others, here is the code from the cellRemoveButton click event:
         // Declare some variables
         var i = this.parent.index;
         var oContractorLeft = ContractorTableLeft.Contractor;
         var oContractorRight = ContractorTableRight.Contractor;
         // Remove this row by accessing its index within the set of 'Item' row instances of the parent table
         _Item.removeInstance(i);
          // Since this table is actually 3 tables, we need to remove the other two table's instances as well.
         // Their index should be the same, so we just need to get their names correct.
         oContractorLeft.instanceManager.removeInstance(i);
         oContractorRight.instanceManager.removeInstance(i);
          // removing the row doesn't trigger calculations in tables in the form's current target (fixed in later versions of Acrobat)
         // force calculations to fire so the ItemIndex field's value is updated according to the remaining row's indexes
         // see http://forms.stefcameron.com/2006/05/20/add-recalculate/
         xfa.form.recalculate(1);
    Again, thank you!
    Karl

  • Count number rows in multiple tables from one query

    Hi
    I was wondering if its possible to have a single query return the number of lines in multiple tables, for example i have the tables
    foo1
    pk_foo1
    and
    foo2
    pk_foo2
    They are not joined together by any contraints. So the pseudo code for the query would be something like
    SELECT numrows(pk_foo1), numrows(pk_foo2) FROM foo1, foo2
    Thanks!

    without a join you get a cartesian product for the query:
    SQL> select count(d.deptno),count(e.deptno)
      2  from dept d,emp e
      3  /
    COUNT(D.DEPTNO) COUNT(E.DEPTNO)
                105             105so you need to do a bit of trickery
      1  select a.cnt,b.cnt
      2  from
      3  ( select count(d.deptno) cnt from dept d ) a,
      4* ( select count(e.deptno) cnt from emp e) b
    SQL> /
           CNT        CNT
             7         15
    SQL> select count(*) from dept;
      COUNT(*)
             7
    SQL> select count(*) from emp;
      COUNT(*)
            15

  • Count rows from multiple tables using SQL only

    Hi, I know this has probably been answered before, but I couldn't find the answer anywhere. Please help.
    I'd like count(*) [rows] for all tables in database using SQL only - no PL/SQL
    The result should be something like:
    Table RowCount
    DBA_TABLES 1000
    DBA_USERS 50
    etc.
    Thanks!

    offcource write this script:
    create or replace procedure count_tables (ip_schema VARCHAR2)
    is
    lv_owner VARCHAR2(100);
    lv_table_name VARCHAR2(100);
    lv_sql_statement VARCHAR2(2000);
    lv_count_table NUMBER;
    CURSOR c1 IS
    SELECT owner, table_name
    FROM all_tables
    WHERE owner = ip_schema
    ORDER BY table_name;
    begin
    dbms_output.put_line ('+--------------------------------------------------------------------+');
    dbms_output.put_line ('¦ | | ¦');
    dbms_output.put_line ('¦ Schema Name | Table Name | Number of Rows ¦');
    dbms_output.put_line ('¦ | | ¦');
    dbms_output.put_line ('¦------------------------------------------------------------------¦');
    OPEN c1;
    LOOP
    FETCH c1 INTO lv_owner , lv_table_name;
    EXIT WHEN c1%NOTFOUND;
    lv_sql_statement := 'SELECT count(*) FROM ' || lv_owner || '.' || lv_table_name;
    EXECUTE IMMEDIATE lv_sql_statement INTO lv_count_table;
    IF lv_count_table > 0 THEN
    dbms_output.put_line ('| '||rpad(lv_owner, 14, ' ')||'| '|| rpad(lv_table_name, 32, ' ')||'| '|| rpad(lv_count_table, 16, ' ')||' |');
    -- dbms_output.put_line ('|---------------|---------------------------------|------------------|');
    END IF;
    END LOOP;
    CLOSE c1;
    dbms_output.put_line ('+--------------------------------------------------------------------+');
    exception
    WHEN OTHERS THEN
    dbms_output.put_line ('owner: '||lv_owner||' - table: '||lv_table_name||' - '||sqlerrm);
    end count_tables;
    set serveroutput on size 1000000
    exec count_tables
    drop procedure count_tables;

  • Update Behavior using Multiple tables

    I'm trying to use the Update behavior from Dreamweaver MX2004
    to update fields from diferent joined tables. The search form works
    OK as I joined the tables and I get great results (see SQL Query
    below). When I try to create link to a detail page from the master
    page and I use the same recordset as below and I use the update
    behavior, I can only choose a table at the time to update fields
    using only one key. If I choose only one table and pass one key
    field is OK but I need to update all three joined tables. Is there
    a way to do something like this in the Link field in the master
    page calling the detail page? Is there is a correct way to pass the
    three keys from the master page to the detail page? I'm using ASP
    and standard SQL. The environment is Windows for testing and SQL
    server.
    Detail Page Parameters (not sure if this could be done):
    details_Admin_Skill_Resource.asp?resourceSkillMapID=
    <%=(Recordset1.Fields.Item("resourceSkillMapID").Value)%>?<%=(Recordset1.Fields.Item("skil lID").Value)%>?<%=(Recordset1.Fields.Item("resourceId").Value)%>
    I'm also inserting hidden fileds in the detail form. Any
    Ideas how to update several tables in DW MX2004 with the update
    behavior?
    This is the query in the recordset and it is working OK as it
    produces results from the search page. What modifications I need to
    do to this recordset in the update page?
    Thank you for your help!!!
    Carlos Melendez
    [email protected]
    This is what I typed in the advanced SQL box in the
    recordset.
    SELECT
    ResourceSkillMapping.resourceSkillMapID,ResourceSkillMapping.skillID,ResourceSkillMapping .competenceLevel,skill.skillname,resource.resourceName,resource.resourceLoginId,resource.r esourceId,resource.profileId,resource.resourceGroupID,resource.resourceType,resource.activ e,resource.autoAvail,resource.extension,resource.orderInRG,resource.dateInactive,resource. assignedTeamID,resource.resourceFirstName,resource.resourceLastName
    FROM ResourceSkillMapping INNER JOIN Skill ON
    ResourceSkillMapping.skillID = Skill.skillID INNER JOIN Resource ON
    ResourceSkillMapping.resourceSkillMapID =
    Resource.resourceSkillMapID
    WHERE (Resource.resourceLoginID LIKE '%Agent_asp%') AND
    (Resource.active = 1)
    Variables
    Skill_asp for skillName
    Agent_asp for resourceLoginID
    Default value of variables is 1 to display all records
    Runtime
    Request.QueryString("skillname")
    Request.QueryString("resourceLoginID")

    ITCoreTeam wrote:
    > I'm trying to use the Update behavior from Dreamweaver
    MX2004 to
    update fields
    > from diferent joined tables. The search form works OK
    as I joined the
    tables
    > and I get great results (see SQL Query below). When I
    try to create
    link to a
    > detail page from the master page and I use the same
    recordset as
    below and I
    > use the update behavior, I can only choose a table at
    the time to
    update fields
    > using only one key. If I choose only one table and pass
    one key field
    is OK but
    > I need to update all three joined tables. Is there a
    way to do
    something like
    > this in the Link field in the master page calling the
    detail page? Is
    there is
    > a correct way to pass the three keys from the master
    page to the
    detail page?
    > I'm using ASP and standard SQL. The environment is
    Windows for
    testing and SQL
    > server.
    > Detail Page Parameters:
    > details_Admin_Skill_Resource.asp?resourceSkillMapID=
    >
    >
    <%=(Recordset1.Fields.Item("resourceSkillMapID").Value)%>?<%=(Recordset1.Fields.
    >
    Item("skillID").Value)%>?<%=(Recordset1.Fields.Item("resourceId").Value)%>
    >
    > I'm also inserting hidden fileds in the detail form.
    Any Ideas how
    to update
    > several tables in DW MX2004 with the update behavior?
    >
    >
    > This is the query in the recordset and it is working OK
    as it
    produces results
    > from the search page. What modifications I need to do
    to this
    recordset in the
    > update page?
    >
    >
    > Thank you for your help!!!
    > Carlos Melendez
    > [email protected]
    >
    > This is what I typed in the advanced SQL box in the
    recordset.
    > SELECT
    >
    >
    >
    ResourceSkillMapping.resourceSkillMapID,ResourceSkillMapping.skillID,ResourceSki
    >
    llMapping.competenceLevel,skill.skillname,resource.resourceName,resource.reso
    >
    >
    >
    urceLoginId,resource.resourceId,resource.profileId,resource.resourceGroupID,reso
    >
    urce.resourceType,resource.active,resource.autoAvail,resource.extension,resou
    >
    >
    >
    rce.orderInRG,resource.dateInactive,resource.assignedTeamID,resource.resourceFir
    > stName,resource.resourceLastName
    > FROM ResourceSkillMapping INNER JOIN Skill ON
    ResourceSkillMapping.skillID =
    > Skill.skillID INNER JOIN Resource ON
    ResourceSkillMapping.resourceSkillMapID =
    >
    > Resource.resourceSkillMapID
    > WHERE (Resource.resourceLoginID LIKE '%Agent_asp%') AND
    (Resource.active = 1)
    > OR (Skill.skillName LIKE '%Skill_asp%')
    >
    > Variables
    > Skill_asp for skillName
    > Agent_asp for resourceLoginID
    >
    > Default value of variables is 1 to display all records
    >
    > Runtime
    > Request.QueryString("skillname")
    > Request.QueryString("resourceLoginID")
    >
    One solution is to create a view in SQL, that is exactly the
    same as
    your SELECT above. You then use the view name instead of the
    table name
    in your UPDATE statement. I know in the SQL world that this
    is possible,
    but I don't know if the Dreamweaver update behaviour will see
    the views
    stored on your SQL server.
    Steve

  • Selecting rows across multiple tables (SSCCE provided)

    Greetings,
    I have a program that has 3 tables. When the user selects a row on one table, I want the corresponding rows in the other tables to be selected also. A corresponding row is defined (in this case) as a row whose column 1 value is the same. Column 1, in this case, is a company name, and the tables reference yearly info for those companies. So, if a user selects company #34, I would like it to select company #34 across the other two tables, also.
    I have established list selection listeners for each table that changes the selection for the other two tables.
    This code, however, doesn't work. two things are broken: 1) the cross-selection only works if the selection is moving up the table, but not down the table. 2) the scrrollRectToVisible on the viewport isn't working. What am I doing wrong? Thanks in advance.
    import java.awt.Rectangle;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import javax.swing.table.DefaultTableModel;
    * @author Ryan
    public class TableSelection {
        public static void main(String[] args){
            // Init data model data.
            Object[][] data = new Object[100][5];
            for(int i = 0; i < data.length; i++){
                data[0] = "Company # " + i;
    for(int j = 1; j < data[i].length; j++){
    data[i][j] = "" + i + ", " + j;
    // Init headers.
    String[] headers = {"Col 1" , "Col 2", "Col 3", "Col 4", "Col 5"};
    // All 3 data models are the same here, in my app however, they aren't.
    DefaultTableModel model1 = new DefaultTableModel(data, headers);
    DefaultTableModel model2 = new DefaultTableModel(data, headers);
    DefaultTableModel model3 = new DefaultTableModel(data, headers);
    // Init Tables. Tables and ScrollPanes are delcared as final to enable access from within ListSelectionEvent
    // Table 1
    final JTable jTable1 = new JTable(model1);
    jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    final JScrollPane sp1 = new JScrollPane();
    sp1.setViewportView(jTable1);
    // Table 2
    final JTable jTable2 = new JTable(model2);
    jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    final JScrollPane sp2 = new JScrollPane();
    sp2.setViewportView(jTable2);
    // Table 3
    final JTable jTable3 = new JTable(model3);
    jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    final JScrollPane sp3 = new JScrollPane();
    sp3.setViewportView(jTable3);
    // Add scrollpanes to panel.
    JPanel panel1 = new JPanel();
    panel1.add(sp1);
    panel1.add(sp2);
    panel1.add(sp3);
    // Add Panel to frame.
    JFrame frame = new JFrame("tableSelection");
    frame.add(panel1);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    // List Selection Listeners
    jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    // Get the first cell in the selected row, I call it "row key".
    String rowKey = jTable1.getValueAt(e.getFirstIndex(), 0).toString();
    for(int i = 0; i < jTable2.getRowCount(); i++){
    if(jTable2.getValueAt(i, 0).equals(rowKey)){
    jTable2.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable2.getCellRect(i, 0, true);
    sp2.getViewport().scrollRectToVisible(rect);
    break;
    for(int i = 0; i < jTable3.getRowCount(); i++){
    if(jTable3.getValueAt(i, 0).equals(rowKey)){
    jTable3.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable3.getCellRect(i, 0, true);
    sp3.getViewport().scrollRectToVisible(rect);
    break;
    jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    // Get the first cell in the selected row, I call it "row key".
    String rowKey = jTable2.getValueAt(e.getFirstIndex(), 0).toString();
    for(int i = 0; i < jTable1.getRowCount(); i++){
    if(jTable1.getValueAt(i, 0).equals(rowKey)){
    jTable1.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable1.getCellRect(i, 0, true);
    sp1.getViewport().scrollRectToVisible(rect);
    break;
    for(int i = 0; i < jTable3.getRowCount(); i++){
    if(jTable3.getValueAt(i, 0).equals(rowKey)){
    jTable3.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable3.getCellRect(i, 0, true);
    sp3.getViewport().scrollRectToVisible(rect);
    break;
    jTable3.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    // Get the first cell in the selected row, I call it "row key".
    String rowKey = jTable3.getValueAt(e.getFirstIndex(), 0).toString();
    for(int i = 0; i < jTable1.getRowCount(); i++){
    if(jTable1.getValueAt(i, 0).equals(rowKey)){
    jTable1.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable1.getCellRect(i, 0, true);
    sp1.getViewport().scrollRectToVisible(rect);
    break;
    for(int i = 0; i < jTable2.getRowCount(); i++){
    if(jTable2.getValueAt(i, 0).equals(rowKey)){
    jTable2.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable2.getCellRect(i, 0, true);
    sp2.getViewport().scrollRectToVisible(rect);
    break;

    New code:
    import java.awt.Rectangle;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import javax.swing.table.DefaultTableModel;
    * @author Ryan
    public class TableSelection {
        public static void main(String[] args){
            // Init data model data.
            Object[][] data1 = new Object[100][5];
            Object[][] data2 = new Object[50][5];
            Object[][] data3 = new Object[50][5];
            for(int i = 0; i < data1.length; i++){
                data1[0] = "Company # " + (i+1);
    for(int j = 1; j < data1[i].length; j++){
    data1[i][j] = "" + (i+1) + ", " + j;
    for(int i = 0; i < data2.length; i++){
    data2[i][0] = "Company # " + ((i * 2) + 1);
    for(int j = 1; j < data2[i].length; j++){
    data2[i][j] = "" + ((i * 2) + 1) + ", " + j;
    for(int i = 0; i < data3.length; i++){
    data3[i][0] = "Company # " + (i * 2);
    for(int j = 1; j < data3[i].length; j++){
    data3[i][j] = "" + (i * 2) + ", " + j;
    // Init headers.
    String[] headers = {"Col 1" , "Col 2", "Col 3", "Col 4", "Col 5"};
    // All 3 data models are the same here, in my app however, they aren't.
    DefaultTableModel model1 = new DefaultTableModel(data1, headers);
    DefaultTableModel model2 = new DefaultTableModel(data2, headers);
    DefaultTableModel model3 = new DefaultTableModel(data3, headers);
    // Init Tables. Tables and ScrollPanes are delcared as final to enable access from within ListSelectionEvent
    // Table 1
    final JTable jTable1 = new JTable(model1);
    jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    final JScrollPane sp1 = new JScrollPane();
    sp1.setViewportView(jTable1);
    // Table 2
    final JTable jTable2 = new JTable(model2);
    jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    final JScrollPane sp2 = new JScrollPane();
    sp2.setViewportView(jTable2);
    // Table 3
    final JTable jTable3 = new JTable(model3);
    jTable3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    final JScrollPane sp3 = new JScrollPane();
    sp3.setViewportView(jTable3);
    // Add scrollpanes to panel.
    JPanel panel1 = new JPanel();
    panel1.add(sp1);
    panel1.add(sp2);
    panel1.add(sp3);
    // Add Panel to frame.
    JFrame frame = new JFrame("tableSelection");
    frame.add(panel1);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    // List Selection Listeners
    jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    // Get the first cell in the selected row, I call it "row key".
    String rowKey = jTable1.getValueAt(e.getFirstIndex(), 0).toString();
    for(int i = 0; i < jTable2.getRowCount(); i++){
    if(jTable2.getValueAt(i, 0).equals(rowKey)){
    jTable2.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable2.getCellRect(i, 0, true);
    sp2.getViewport().scrollRectToVisible(rect);
    break;
    if(i == jTable2.getRowCount() - 1)
    jTable2.clearSelection();
    for(int i = 0; i < jTable3.getRowCount(); i++){
    if(jTable3.getValueAt(i, 0).equals(rowKey)){
    jTable3.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable3.getCellRect(i, 0, true);
    sp3.getViewport().scrollRectToVisible(rect);
    break;
    if(i == jTable3.getRowCount() - 1)
    jTable3.clearSelection();
    jTable2.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    // Get the first cell in the selected row, I call it "row key".
    String rowKey = jTable2.getValueAt(e.getFirstIndex(), 0).toString();
    for(int i = 0; i < jTable1.getRowCount(); i++){
    if(jTable1.getValueAt(i, 0).equals(rowKey)){
    jTable1.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable1.getCellRect(i, 0, true);
    sp1.getViewport().scrollRectToVisible(rect);
    break;
    if(i == jTable1.getRowCount() - 1)
    jTable1.clearSelection();
    for(int i = 0; i < jTable3.getRowCount(); i++){
    if(jTable3.getValueAt(i, 0).equals(rowKey)){
    jTable3.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable3.getCellRect(i, 0, true);
    sp3.getViewport().scrollRectToVisible(rect);
    break;
    if(i == jTable3.getRowCount() - 1)
    jTable3.clearSelection();
    jTable3.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
    // Get the first cell in the selected row, I call it "row key".
    String rowKey = jTable3.getValueAt(e.getFirstIndex(), 0).toString();
    for(int i = 0; i < jTable1.getRowCount(); i++){
    if(jTable1.getValueAt(i, 0).equals(rowKey)){
    jTable1.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable1.getCellRect(i, 0, true);
    sp1.getViewport().scrollRectToVisible(rect);
    break;
    if(i == jTable1.getRowCount() - 1)
    jTable1.clearSelection();
    for(int i = 0; i < jTable2.getRowCount(); i++){
    if(jTable2.getValueAt(i, 0).equals(rowKey)){
    jTable2.getSelectionModel().setSelectionInterval(i, i);
    Rectangle rect = jTable2.getCellRect(i, 0, true);
    sp2.getViewport().scrollRectToVisible(rect);
    break;
    if(i == jTable2.getRowCount() - 1)
    jTable2.clearSelection();

Maybe you are looking for

  • How to make search engine results lead to a specific slide

    Through Google Analytics I found that a search in Bing for a particular item took the user to my page. The third slideshow, one of three tabbed slideshows on that page, is the default and shows first. The user promptly left my site because this wasn'

  • [svn] 4028: Bug: Draining of buffered messages doesn' t work correctly with long-polling.

    Revision: 4028 Author: [email protected] Date: 2008-11-06 09:04:26 -0800 (Thu, 06 Nov 2008) Log Message: Bug: Draining of buffered messages doesn't work correctly with long-polling. QA: Yes - please make sure both nio and regular long-polling channel

  • DbAdapter invocation issue

    Hello everyone, I have a stored procedure in a SqlServer 2012 database, as follows: CREATE PROCEDURE [dbo].[SP_GET_PERSONS] @Id varchar(15), @FirstName varchar(30), @LastName varchar(30) WITH EXEC AS CALLER AS BEGIN      Declare @SQL VarChar(MAX)   C

  • Converter sample from J2EE Tutorial problem

    Hello all, I have built the ConvertApp using the J2EE as shown in the J2EE (which I highly recommend by the way --on-line or book version), but am getting the following error: (from Verifier log file):      FAILED TESTS :      Test Name : tests.web.e

  • HELP!! Painter IX won't load on new iMac

    Ack. This is WEIRD! I started fresh on my new iMac (fourth version), and put in my Corel Painter IX CD, entered the info and serial number, and it downloaded fine. But when I click on it, it starts to launch, then just stops and gives up. It won't di