Generate Key by referencing same table?

Is it OK to generate a Key by referencing the max + 1 of the same table using a trigger? Can anything go wrong? (I am fully aware that a sequence can be used instead but my co-worker is trying this other approach.)
Sample Code:
CREATE OR REPLACE TRIGGER trgTableA BEFORE INSERT ON TableA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
DECLARE
iCounter TableA.SEQ_NUM%TYPE;
BEGIN
IF INSERTING THEN
Select max(seq_num)+1 INTO iCounter FROM TableA;
if (iCounter is null) then
          :new.SEQ_NUM :=1;
     else
          :new.SEQ_NUM := iCounter;
          end if;
END IF;
END

e.g.
SESSION 1:
dw2@DWDEVA> DROP TABLE test;
Table dropped.
Elapsed: 00:00:00.00
dw2@DWDEVA>
dw2@DWDEVA> CREATE TABLE test
  2    (col1 number CONSTRAINT test_pk PRIMARY KEY);
Table created.
Elapsed: 00:00:00.00
dw2@DWDEVA>
dw2@DWDEVA> CREATE OR REPLACE TRIGGER trgTest
  2  BEFORE INSERT ON test REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
  3  DECLARE
  4    iCounter  test.col1%TYPE;
  5  BEGIN
  6    IF INSERTING THEN
  7      SELECT max(col1)+1
  8      INTO iCounter
  9      FROM test;
10      IF iCounter is NULL
11        THEN :new.col1 := 1;
12      ELSE
13        :new.col1 := iCounter;
14      END IF;
15    END IF;
16  END;
17  /
Trigger created.
Elapsed: 00:00:00.00
dw2@DWDEVA>
dw2@DWDEVA> INSERT INTO test VALUES(1);
1 row created.
Elapsed: 00:00:00.00
dw2@DWDEVA> SELECT * FROM test;
      COL1
         1
Elapsed: 00:00:00.00
dw2@DWDEVA> INSERT INTO test VALUES(1);
1 row created.
Elapsed: 00:00:00.04
dw2@DWDEVA> select * from test;
      COL1
         1
         2
Elapsed: 00:00:00.00
dw2@DWDEVA> --no commit
SESSION 2:
insert into test values(1);
-- waits for session 1 to end transaction
SESSION 1:
COMMIT;
SESSION 2:
insert into test values(1)
ERROR at line 1:
ORA-00001: unique constraint (DW2.TEST_PK) violatedThis won't happen with sequences

Similar Messages

  • Foreign Keys referencing same Table

    Post Author: Teddy
    CA Forum: Data Connectivity and SQL
    Hello!
    One table i'm using to build my report has two foreign key fields ('start_id', 'target_id') referencing the same table 'city' (city_id, cityname).
    When i try to generate the report both field contain the cityname the start_id is pointing to. Is there a way to also retrieve the correct cityname for target_id?
    I'm not sure if this is a CR  or a DB design problem? The DB is not my work...

    Post Author: Teddy
    CA Forum: Data Connectivity and SQL
    Hello!
    One table i'm using to build my report has two foreign key fields ('start_id', 'target_id') referencing the same table 'city' (city_id, cityname).
    When i try to generate the report both field contain the cityname the start_id is pointing to. Is there a way to also retrieve the correct cityname for target_id?
    I'm not sure if this is a CR  or a DB design problem? The DB is not my work...

  • SQL error msg - The DELETE statement conflicted with the SAME TABLE REFERENCE constraint

    Executed as user: ****. The DELETE statement
    conflicted with the SAME TABLE REFERENCE constraint "FK_PARENT_TASK_REF".
    The conflict occurred in database "****", table "****", column
    'PARENT_TASK_ID'. [SQLSTATE 23000] (Error 547) The statement has been
    terminated. [SQLSTATE 01000] (Error 3621). The step failed.
    Does this error msg indicate the whole script failed to execute or was it just a single step/task that failed ?
    What does error msg mean ?
    Anyway to prevent this error msg and ensure script runs successfully

    Hi mdavidh,
    This error occurs because the record  'PARENT_TASK_ID' was referenced by 'FK_PARENT_TASK_REF'.
    Please refer below codes:
    CREATE TABLE MyTable (
    ID INT, primary key(ID), -- primary key
    ID_Parent INT foreign key(ID_Parent) references MyTable(ID), -- foreign key reference the same table
    insert into MyTable(ID,ID_Parent)
    values(0,0);
    insert into MyTable(ID,ID_Parent)
    values(1,0);
    insert into MyTable(ID,ID_Parent)
    values(2,0);
    insert into MyTable(ID,ID_Parent)
    values(3,1);
    insert into MyTable(ID,ID_Parent)
    values(4,3);
    insert into MyTable(ID,ID_Parent)
    values(5,4);
    CREATE TRIGGER MyTrigger
    on MyTable
    instead of delete
    as
    set nocount on
    update MyTable set ID_Parent = null where ID_Parent in (select ID from deleted)
    delete from MyTable where ID in (select ID from deleted)
    Now we could delete records.
    delete from MyTable where ID_Parent=0
    Thanks,
    Candy Zhou

  • Two columns in the same table that are foreign keys to the same master key

    i want to create a table let say X, which have two columns that are foreign key that reference the same column in the master table, so does this count as bad database design.

    here is the full ddl for the two table, where in the second table there are two columns that represent the primary key and they are also two foreign keys to the same columns in the master table (items)
    Desc item table;
    Item_id
    Item_name
    Item_price
    Item_quantitiy
    Create table item_recommendation ( item_id varchar(20), recommended_item varchar(20),
    CONSTRAINT recom_primary PRIMARY KEY (item_id, recommended_item),
    CONSTRAINT F1 FOREIGN KEY (item_id) REFERENCES items(item_id), ),
    CONSTRAINT F2 FOREIGN KEY (recommended_item) REFERENCES items(item_id));

  • Foreign keys to same table / Who columns in User table???

    Hi All,
    We are designing a database for our client and we are using common columns in all tables like CreatedBy and UpdatedBy which are foreign keys to USER table. My question is can we use these two columns in USER table and have the foreign key constraints to the same tables?
    USER table script will look like following..
    CREATE TABLE XX_USER
         User_ID                              VARCHAR2(10)
    ,     CreatedBy                         NUMBER(10)
    ,     UpdatedBy                         NUMBER(10)
    ,     User_Name                         VARCHAR2(100)     NOT NULL
    ,     Designation                         VARCHAR2(100)     NOT NULL
    ,     CONSTRAINT USER_ISACTIVE_CHECK CHECK (Is_Active in ('Y', 'N'))
    ,     CONSTRAINT USER_KEY PRIMARY KEY (User_ID),
    ,     CONSTRAINT USER_CREATED_BY FOREIGN KEY (CREATED_BY)
         REFERENCES XX_USER (USER_ID)
    ,     CONSTRAINT USER_UPDATED_BY FOREIGN KEY (UPDATED_BY)
         REFERENCES XX_USER (USER_ID)
    );I think what I am doing (the above script) is not correct. Could someone please suggest me how can solve this issue?
    Thanks in advance,
    Oraebs

    user8644385 wrote:
    We are designing a database for our client and we are using common columns in all tables like CreatedBy and UpdatedBy which are foreign keys to USER table. My question is can we use these two columns in USER table and have the foreign key constraints to the same tables?You can. After fixing synatx errors:
    SQL> CREATE TABLE XX_USER
      2  (
      3   User_ID        VARCHAR2(10)
      4  , CreatedBy     NUMBER(10)
      5  , UpdatedBy     NUMBER(10)
      6  , User_Name     VARCHAR2(100) NOT NULL
      7  , Designation   VARCHAR2(100) NOT NULL
      8  , Is_Active     VARCHAR2(1)
      9  , CONSTRAINT USER_ISACTIVE_CHECK CHECK (Is_Active in ('Y', 'N'))
    10  , CONSTRAINT USER_KEY PRIMARY KEY (User_ID)
    11  , CONSTRAINT USER_CREATED_BY FOREIGN KEY (CreatedBy)
    12       REFERENCES XX_USER(USER_ID)
    13  , CONSTRAINT USER_UPDATED_BY FOREIGN KEY (UpdatedBy)
    14       REFERENCES XX_USER(USER_ID)
    15  )
    16  /
    Table created.
    SQL> Now USER_ID is a string while CreatedBy/UpdatedBy is a number. Even though it is allowed, it limits USER_ID to numeric strings and causes implicit conversions while validating. So I would change CreatedBy/UpdatedBy data type to VARCHAR2(10).
    SY.

  • Can we generate the same key with the same password???

    Hi everyone,
    Is it at all possible to generate the same key? I have a program that takes a user password, creates a key. And this is done in a loop for 5 times. I just wanted to see if the keys that are generated will be the same for the same password. But the keys that are generated are different.
    Does anyone have any idea why this would happen?
    My Environment
    jdk1.2.2
    jce1.2.1
    My class is very simple as is as follows
    import java.security.*;
    public class SecureStuff {
    static
    Security.addProvider(new com.sun.crypto.provider.SunJCE());
    public SecureStuff()
    try {
    Key secretKey = null;
    for (int i = 0; i < 6; i++){
    javax.crypto.spec.DESedeKeySpec spec = new javax.crypto.spec.DESedeKeySpec("PASSWORDPASSWORDPASSWORD".getBytes());
    javax.crypto.SecretKeyFactory desFactory = javax.crypto.SecretKeyFactory.getInstance("DESede");
    secretKey = desFactory.generateSecret(spec);
    System.out.println("key generated:"+secretKey.getEncoded());
    } catch (Exception e){
    e.printStackTrace();
    public static void main(String[] args) {
    SecureStuff securestuff = new SecureStuff();
    The Output
    C:\> java SecureStuff
    key generated:[B@eb7989c5
    key generated:[B@e96189c5
    key generated:[B@e99589c5
    key generated:[B@e8d989c5
    key generated:[B@ef4189c5
    key generated:[B@eff589c5
    Please can anyone help me..
    Thank you very very much.
    ...geetha

    Hi,
    I was wondering if you have found a solution to your question.. I justed started working with JCE and have to implement the same functionality. basically I am trying to Encrypt passwords stored in the DB and then when a user logs in, I encrypt his password and compare with the stored password in the DB. For me to do this I have to be sure I can get the same key generated for each encryption.
    Also, do you have any examples I can look at or any recommendation on books that explain this subject (JCE) well.
    Thanks
    Chi

  • Questions about creating a foreign key on a large table

    Hello @ll,
    during a database update I lost a foreign key between two tables. The tables are called werteart and werteartarchiv_pt. Because of its size, werteartarchiv_pt is a partitioned table. The missing foreign key was a constraint on table werteartarchiv_pt referencing werteart.
    Some statistics about the sizes of the mentioned tables:
    werteart 22 MB
    werteartarchiv_pt 223 GB
    werteartarchiv_pt (Index) 243 GB
    I tried to create the foreign key again, but it failed with the following error (Excuses for the german error message):
    sqlplus ORA-00604: Fehler auf rekursiver SQL-Ebene 1
    sqlplus ORA-01652: Temp-Segment kann nicht um 128 in Tablespace TEMPS00 erweitert
    The statement I used:
    alter table werteartarchiv_pt
    add constraint werteartarchiv_pt_fk1
    foreign key (schiene, werteartadresse, merkmale)
    references werteart (schiene, werteartadresse, merkmale)
    on delete cascade
    initially deferred deferrable;
    So the problem seems to be, that Oracle needs a lot of temporary tablespace to generate the foreign key and I do not know how much and why.
    My questions now are, and hopefully someone is here, who can answer all or a part of it:
    1) Why does Oracle need temporary tablespace to create the foreign key? The foreign key uses the same columns like the primary key.
    2a) Is it possible to tweak the statement without using the temporary tablespace?
    2b) If it is not possible to avoid the usage of the temporary tablespace, is there a formula how to calculate the needed temporary tablespace?
    3) Is it possible to modify data in the tables while the foreign key is created or is the whole table locked during the process?
    Any help or hint is appreciated.
    Regards,
    Bjoern

    RollinHand wrote:
    My questions now are, and hopefully someone is here, who can answer all or a part of it:
    1) Why does Oracle need temporary tablespace to create the foreign key? The foreign key uses the same columns like the primary key.Because it's validating the data to ensure the foreign key won't be violated. If you had specified ENABLE NOVALIDATE when creating it then the existing data in the table wouldn't need to be checked and the statement should complete instantly (future data added would be checked by the constraint).
    http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/general005.htm
    Search for "Enable Novalidate Constraint State"

  • Query performance on same table with many DML operations

    Hi all,
    I am having one table with 100 rows of data. After that, i inserted, deleted, modified data so many times.
    The select statement after DML operations is taking so much of time compare with before DML operations (There is no much difference in data).
    If i created same table again newly with same data and fire the same select statement, it is taking less time.
    My question is, is there any command like compress or re-indexing or something like that to improve the performance without creating new table again.
    Thanks in advance,
    Pal

    Try searching "rebuilding indexes" on http://asktom.oracle.com. You will get lots of hits and many lively discussions. Certainly Tom's opinion is that re-build are very rarley required.
    As far as I know, Oracle has always re-used deleted rows in indexes as long as the new row belongs in that place in the index. The only situation I am aware of where deleted rows do not get re-used is where you have a monotonically increasing key (e.g one generated by a seqence), and most, but not all, of the older rows are deleted over time.
    For example if you had a table like this where seq_no is populated by a sequence and indexed
    seq_no         NUMBER
    processed_flag VARCHAR2(1)
    trans_date     DATEand then did deletes like:
    DELETE FROM t
    WHERE processed_flag = 'Y' and
          trans_date <= ADD_MONTHS(sysdate, -24);that deleted the 99% of the rows in the time period that were processed, leaving only a few. Then, the index leaf blocks would be very sparsely populated (i.e. lots of deleted rows in them), but since the current seq_no values are much larger than those old ones remaining, the space could not be re-used. Any leaf block that had all of its rows deleted would be reused in another part of the index.
    HTH
    John

  • CF 9.0.2 and Oracle - On update returns error "Auto-generated keys were not requested..."

    We have a simple update statement to Oracle 11g Database. When running the statement the data is not getting updated and we are getting an error "Auto-generated keys were not requested, or the SQL was not a simple INSERT statement. ErrorCode=0 SQLState=HY000". We found this error by dumping the SQL to a file.
    But most other Update statements are working fine.
    Also, the same statment works for Oracle 10g and Coldfusion 9.0.0.
    Any idea if this is a problem with Coldfusion or Oracle? Is there any resolution.
    I found the CF 8 had a similar issue and was fixed in a hotfix (http://helpx.adobe.com/coldfusion/kb/error-auto-generated-keys-requested.html).

    Hi,
    Thanks. I compiled my code using JDeveloper 10.1.2, didn't dare to use the latest. It works in 10g apps server. When I deployed to 9ias apps server, those weird errors showed up. Unfornately, our dev environment is at a newer version than the production one.
    So, you think the error is generated because I referenced some newer technologies that was not provided by 9ias?
    Jia

  • How to generate a query involving multiple tables(one left join others)

    Hi, all,
    I want to query a db like these:
    I need all the demographics information(from table demo) and their acr info(from table acr), and their clinical info(from table clinical), and their lab info(from table lab).
    The db is like this:
    demo->acr: one to many
    demo->clinical info: one to many
    demo->lab info: one to many
    I want to get one query result which are demo left join acr, and demo left join clinical, and demo left join lab. I hope the result is a record including demo info, acr info, clinical info, and lab info.
    How could I do this in SQL?
    Thanks a lot!
    Qian

    Thank you very, very much!
    Actually, I need a huge query to include all the tables in our db.
    We are running a clinical db which collects the patients demographics info, clinical info, lab info, and many other information.
    The Demographics table is a center hub which connects other tables. This is the main architecture.
    My boss needed a huge query to include all the information, so others could find what they need by filtering.
    As you have found, because one patients usually has multiple clinical/lab info sets, so the result will be multiplied! the number of result=n*m*k*...
    My first plan is to set time point criteria to narrow all the records with one study year. If somebody needs to compare them, then I have to show them all.
    So I have to know the SQL to generate a huge query including as many tables as possible.
    I show some details here:
    CREATE TABLE "IMMUNODATA"."DEMOGRAPHICS" (
    "SUBJECTID" INTEGER NOT NULL,
    "WORKID" INTEGER,
    "OMRFHISTORYNUMBER" INTEGER,
    "OTHERID" INTEGER,
    "BARCODE" INTEGER,
    "GENDER" VARCHAR2(1),
    "DOB" DATE,
    "RACEAI" INTEGER,
    "RACECAUCASIAN" INTEGER,
    "RACEAA" INTEGER,
    "RACEASIAN" INTEGER,
    "RACEPAC" INTEGER,
    "RACEHIS" INTEGER,
    "RACEOTHER" VARCHAR2(50),
    "SSN" VARCHAR2(11),
    PRIMARY KEY("SUBJECTID") VALIDATE
    CREATE TABLE "IMMUNODATA"."ACR" (
    "ID" INTEGER NOT NULL,
    "THEDATE" DATE ,
    "SUBJECTID" INTEGER NOT NULL,
    "ACR_PAGENOTCOMPLETED" VARCHAR2(1000) ,
    "ACR_MALARRASHTODAY" INTEGER ,
    "ACR_MALARRASHEVER" INTEGER ,
    "ACR_MALARRSHEARLIESTDATE" DATE ,
    PRIMARY KEY("ID") VALIDATE,
    FOREIGN KEY("SUBJECTID") REFERENCES "IMMUNODATA"."DEMOGRAPHICS" ("SUBJECTID") VALIDATE
    CREATE TABLE "IMMUNODATA"."CLIN" (
    "ID" INTEGER NOT NULL,
    "THEDATE" DATE ,
    "SUBJECTID" INTEGER NOT NULL,
    "CLIN_PAGENOTCOMPLETED" VARCHAR2(1000) ,
    "CLIN_FATIGUE" VARCHAR2(20) ,
    "CLIN_FATIGUEDATE" DATE ,
    "CLIN_FEVER" VARCHAR2(20) ,
    "CLIN_FEVERDATE" DATE ,
    "CLIN_WEIGHTLOSS" VARCHAR2(20) ,
    "CLIN_WEIGHTLOSSDATE" DATE ,
    "CLIN_CARDIOMEGALY" VARCHAR2(20) ,
    PRIMARY KEY("ID") VALIDATE,
    FOREIGN KEY("SUBJECTID") REFERENCES "IMMUNODATA"."DEMOGRAPHICS" ("SUBJECTID") VALIDATE
    Other tables are alike.
    Thank very much!
    Qian

  • Multiple foreign keys to a single table

    Hi,
    I need to write an SQL sentence to bring a unique row formed from multiple foreign keys which are dependent on the same table. The two tables as follow:
    CREATE TABLE UNIDADMEDIDA (
    IDUNIDADMEDIDA NUMERIC(3) NOT NULL,
    DESCRIPCION VARCHAR2(128) NOT NULL,
    CONSTRAINT PKUM PRIMARY KEY(IDUNIDADMEDIDA)
    CREATE TABLE TRANSPORTE (
    IDBOLETA NUMERIC(12) NOT NULL,
    CORRELAVEHICULO NUMERIC(2) NOT NULL,
    TIPOVEHICULO NUMERIC(1),
    TIPOGASOLINA NUMERIC(1),
    CANTIDAD NUMERIC(8),
    RECORRIDOPROMEDIO NUMERIC(10,2),
    IDUMRECORRIDO NUMERIC(3),
    CONSUMOPROMEDIO NUMERIC(10,2),
    IDUMCONSUMOPROM NUMERIC(3),
    CONSUMOTOTALANUAL NUMERIC(10,2),
    IDUMCONSUMOTOT NUMERIC(3),
    CONSTRAINT PKTRANSPORT PRIMARY KEY(IDBOLETA, CORRELAVEHICULO),
    CONSTRAINT FKUMRECORRI FOREIGN KEY(IDUMRECORRIDO) REFERENCES UNIDADMEDIDA(IDUNIDADMEDIDA),
    CONSTRAINT FKUMCONSUMO FOREIGN KEY(IDUMCONSUMOPROM) REFERENCES UNIDADMEDIDA(IDUNIDADMEDIDA),
    CONSTRAINT FKUMCONSTOT FOREIGN KEY(IDUMCONSUMOTOT) REFERENCES UNIDADMEDIDA(IDUNIDADMEDIDA)
    The columns IDUMRECORRIDO, IDUMCONSUMOPROM and IDUMCONSUMOTOT depend on the table UNIDADMEDIDA (specifically from the IDUNIDADMEDIDA field). I need to bring back the description (DESCRIPCION field) from the different values stored in TRANSPORTE table.
    Thanks for your help!!!
    Mario

    Welcome to the forum!
    Have you thought about joining against the parent table three times to pick up each different description?
    SELECT  <COLUMN LIST>
    ,       UNI_A.DESCRIPCION
    ,       UNI_B.DESCRIPCION
    ,       UNI_C.DESCRIPCION
    FROM    TRANSPORTE
    JOIN    UNIDADMEDIDA    UNI_A   ON UNI_A.IDUNIDADMEDIDA = TRANPORTE.IDUMRECORRIDO
    JOIN    UNIDADMEDIDA    UNI_B   ON UNI_B.IDUNIDADMEDIDA = TRANPORTE.IDUMCONSUMOPROM
    JOIN    UNIDADMEDIDA    UNI_C   ON UNI_C.IDUNIDADMEDIDA = TRANPORTE.IDUMCONSUMOTOT
    ;It is always helpful to provide the following:
    1. Oracle version (SELECT * FROM V$VERSION)
    2. Sample data in the form of CREATE / INSERT statements.
    3. Expected output
    4. Explanation of expected output (A.K.A. "business logic")
    5. Use \ tags for #2 and #3. See FAQ (Link on top right side) for details.
    You provided #2 partially. If you provide the rest we may be able to help you even further.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Load Data from a table on one server's database, to the same table structure in multiple server databases

    Hi,
    I have a situation where i have to load data from one server/database table to multiple servers/databases.
    Example:
    I need to load data from dbo.TABLE_A  (on Server: Server_A & Database: Database_A)  to the same table on the list of server databases like
    Server: Server_B , Database: Database_B
    Server: Server_C , Database: Database_C
    Server: Server_D , Database: Database_D
    Server: Server_E , Database: Database_E
    Server: Server_F , Database: Database_F
    Server: Server_G , Database: Database_G
    Server: Server_H , Database: Database_H
    so on and so forth on 250 such server database combinations.
    The table structure is the same on all the servers.
    If i make the source or destination dynamic, it throws an error while mapping ?
    I cannot get Linked server permissions and SQL Server Config thing doesn't work as well.
    Please suggest on how to load data from one source to multiple server/databases.
    Thank you.

    I just need to transfer one table's data. its like i have to use a query to pick data for
    the most recent data. So i use something like, select A, B, C, D from dbo.table where ETL_TIMESTAMP > (the max(etltimestamp) in the destination on different server). There are no foreign key relationships and the data should not be truncated. it just had
    to append the new records.

  • Maintaining Remote key in look up tables for Production data

    Hi,
    me
    SEE in DEV and QA to maintain the Remote key for Look up tables.First i have exported those look up table values and again imported with mapping Remote keys (clone the field and map it to Remote key.). By this i have maintained the Remote keys to all look up tables. Now for Production what should i do. Is it the same process extract all records from production into our desktop and then again import it using IM, clone the field and map it to Remote key.
    1. Is this the right process?
    2. What happens if there are huge data present in production how to proceed furthr then?
    Required your suggestion please.
    Thanks,
    Pradeep

    HI Pradeep,
    I dont see any problem with this method if I am getting it right
    You are updating remote keys by reimporting lookup data, and this way you have multiple remote keys for data in lookup table,right?
    This will help you to automap entries in Import process for different Remote systems.
    I did not get your 2nd point?
    Thanks,
    Ravi

  • Updating the key field in a table

    I am trying to assign new values to the primary key column in a table. As it is necessary to hold a permanent record of the relationship between the new and old values, I am extracting the old values into another table and assigning the new values from a sequence with an insert trigger on this table.
    Within the same mapping, I cannot seem to take the new values from this table and update the original table. Ideally, I would like to update key flexfield colum with the new primary key values using the old primary values as the in the where clause' of the update statement (as opposed to delete and reinsert the rows into) the originating table - as I only pull across the key flexfield column into the number allocation table, this is necessary to preserve the other data.
    Can anyone let me know how this can be achieved?...I cannot find the concept of new and old in OWB table updates.
    I have tried using the (unsuitable) load type of 'DELETE/INSERT' on this table, but this results in the contents of the table being deleted when I run the mapping.

    If it's necessary to change the primary key then your database design is likely wrong. I don't understand why it would be necessary to update a PK unless you use PK with a certain meaning which is a design failure.
    Regards,
    Jörg

  • Two LOVs in same UIX page based on the same table

    Hi group,
    Recently I ran into a problem with a UIX page that has two LOVs based on the same database table. In Emp and Job terminology, here's what I tried to do.
    Suppose we have use the Employees and Jobs tables from the HR scheme with one small modification. Add a column called PREFERRED_JOB_ID of type VARCHAR2(10) which is exactly the same as JOB_ID. Hypothetically speaking, this column will be used to allow Employees to select their preferred job in case they want to change their jobs.
    Next, create business components in JDeveloper based on the Employees and Jobs table. In order to be able to generate the LOVs for Job and PreferredJob create two ViewObjects, one called JobsLookupView and one called PreferredJobsLookupView. These both need to be based upon the same Jobs EntityObject. Also include the Jobs EntityObject twice in the EmployeesView ViewObject and give one the alias PreferredJobs. Include the JobTitle attributes of Jobs and PreferredJobs in EmployeesView so they can contain the JobTitles selected in our future LOVs.
    Next create a ViewController project if it's not already there and enable JHeadstart on it. Create an Application Structure File and create the lookups for the two LOVs. When I run the application I see this happening:
    When I click the flashlight icon next to the PreferredJob LOV and select a job, the PreferredJob field is selected in the UIX page but no job title appears. When I next first select the Job LOV and select a new job and then select the PreferredJob LOV again and select a different job, the job that was selected in the Job LOV is now also entered in the PreferredJob field. When I make sure the PreferredJob field isn't required (remove the required="yes" property on the messageLovInput entry for PreferredJobTitle and remove the PreferredJobTitle field from the addRequiredRowItems list in the UIX page) I can save the changes I made in the Employees.uix page. The same JobId is stored in the database for Job and PreferredJob.
    This behaviour is probably due to cacheing issues because both LOVs and the EmployeesView ViewObject use one EntityObject for four values in three ViewObjects.
    So I then modified my model a bit. I created a new EntityObject called PreferredJobs based on the JOBS table. I modified the EmployeesView ViewObject to use this EntityObject for the PreferredJobTitle attribute and modified the PreferredJobsLookupView to use this EntityObject.
    I needed to modify a few things as well in the Application Structure File (which were prompts and whether or not the attribute should be visible in a table) and after regenerating I made sure the PreferredJob attribute isn't required in the UIX page. When I then run the application again, I never see the JobTitle I select in any LOV allthough the PreferredJob field is selected when I select a Job in the PreferredJob LOV. The correct JobId now is stored in the database though.
    Has anyone ever encoutered this behaviour? Would anyone know how to get two LOVs based on the same table in one UIX page?
    Thanks in advance,
    Wouter van Reeven
    AMIS

    OK I figured it out. When I added the second Lookup ViewObject (PreferredJobs) no additional Association was created. Therefore, ADF BC wasn't able to figure out which field to update. When I added the Association between the PreferredJobs Lookup ViewObject and the Employees ViewObject everything started working ok.
    I then recreated my inital situation: one EntityObject for Jobs and one for Employees, now with two Associations between them. After modifying the Employees ViewObject and making sure the Jobs EntityObject was referred twice and via the corresponding Association, everything started working ok.
    Greets, Wouter
    AMIS

Maybe you are looking for