JPA uniqueness constraint on columns

Hi all,
I have a very simple data structure which has
- the key (String) of another data class
- a Date (using TemporalType.DATE)
- an integer value
but the combination of the timestamp and the key makes for a unique identifier. I could quite easily add an additional 4th @Column into my @Entity that is my @Id, but I'd rather investigate how JPA can help me setup a custom @Id that is the combination of the key and the timestamp value. It would be good to be able to let the database manage the uniqueness, instead of me having to programmatically handle (and check) it in JPA-QL queries.
Is this a classic case of @EmbeddedId or @IdClass? If so, it seems like an awful lot of boilerplate code to achieve what I want. Is what I am proposing even recommended? Is there perhaps another way to achieve uniqueness for the combination of these two columns?

In general I would recommend using a generated Id, but yes, your example is a case for using an @EmbeddedId or @IdClass.
See,
http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Composite_Primary_Keys
-- James : http://www.eclipselink.org

Similar Messages

  • Put a unique constraint on column if duplicate data is already present

    how to put a unique constraint on column if duplicate data is already present in that column?

    Hello,
    I have Oracle 10g and in this version documentation (SQL Reference) just says
    ENABLE NOVALIDATE ensures that all new DML operations on the constrained data comply with the constraint. This clause does not ensure that existing data in the table complies with the constraint and therefore does not require a table lock.
    So, as far as I understand, it does not guarantee that the constraint is really not validated:
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
    Connected as xxxx
    SQL>
    SQL> create table drop_me as
      2  select 1 as id from dual
      3  union all
      4  select 1 as id from dual;
    Table created
    SQL> alter table drop_me
      2  add constraint unq_id unique (id) enable novalidate;
    alter table drop_me
    add constraint unq_id unique (id) enable novalidate
    ORA-02299: cannot validate (XXXX.UNQ_ID) - duplicate keys found
    SQL>

  • Coding challenge - Unique constraint between column in 2 different tables

    Hi I have 3 tables like
    project--> pk: projectid
    category --> pk: categoryid FK: projecid
    Buyer --> Pk: buyerid FK : Categoryid
    each project can have multiple categories, and each category can have multiple buyer. I need to ensure that a buyer can be adde to a project (uniqueness of projectid & Buyer id). I tried with triggers and its erroring out. Is there a easier way to enforce this?

    Selvaganapathy wrote:
    Hi I have 3 tables like
    project--> pk: projectid
    category --> pk: categoryid FK: projecid
    Buyer --> Pk: buyerid FK : Categoryid
    each project can have multiple categories, and each category can have multiple buyer. I need to ensure that a buyer can be adde to a project (uniqueness of projectid & Buyer id). I tried with triggers and its erroring out. Is there a easier way to enforce this?I think there is a logical error in the problem description.
    If one project can have multiple categories (P1 has C1 and C2) and one category can have multiple buyers (C1 has B1 and B2) then the project is automatically matched to two buyers (P1 has B1 and B2). This is against the rule project+buyer are unique.
    I think Selvaganapathy should explain the business logic with a practical example. my feeling is that the unuiqness is only on part of the buyer, not on part of the project. Like one Buyer can only be matched to one project, but one project can have several buyers. But this would allow totaly different solutions. Like adding the project ID to the Buyer table as a foreign key.
    Edited by: Sven W. on Aug 31, 2009 4:23 PM

  • Unique constraint is not thrown when used MERGE INSERT (alone) via dblink.

    We found some interesting behaviour of unique constraint on Merge query when we use Merge When Not Matched Insert (no update query) via a dblink.
    In one Schema S1, on Table A1(c1,c2,c3) there is a unique constraint on column (c1,c2).
    Column c2 is nullable and has null for some records.
    Now i have a table A2 with same defintion as A1 in Schema S2.In S2 , i have a dblink of S1 as S1 itself.
    I have data in S2.A2. Here also i have some records with c2 as null and c1 matching with the data of S1.A1.
    Now from schema S2,
    I am using the following Merge Query,
    MERGE INTO S1.A1 target
    USING S2.A2 source
    ON (target.c1 = source.c1 and target.c2 = source.c2)
    WHEN NOT MATCHED
    INSERT (c1,c2,c3) values (source.c1, source.c2,source.c3)
    WHEN MATCHED
    UPDATE c3 = source.c3;
    Now when i execute this merge in schema S2,
    if i have some data in S1.A1 and S2.A2 having c1 as same and c2 as null, as oracle does not treat two nulls same, it goes for an insert, i have got unique constraint violated error.
    But if i execute MERGE INSERT alone, though that record is getting inserted , i am not getting unique constraint violated error.
    Oracle version we are using is 10g (10.2...).
    Is it a bug in oracle or what could have caused this behaviour.

    Dear,
    ERROR at line 1:
    ORA-00001: unique constraint (SYS_C00137508) violatedYou need to think about two things
    (a) read consistency : what was the situation of table_1 when the maching clause has been initially evaluated ; there were 0 rows matching which means the merge operation will be all insert
    (b) your matching clause has a problem : the join column must be unique in both tables otherwise the merge will be ambigous. You don't have a unique key on the source table
    (c) think that the merge operation will never insert id =1 and then update id = 1 within the same operation. This will never happen
    Hope this helps
    Mohamed Houri

  • Unique constraint violation while updating a non PK column

    Hi,
    I seem to have found this strange error.
    What I try to do is bulk fetch a cursor in some table arrays. with limit of 1000
    Then using a forall and a save exceptions at the end
    I update a table with the values inside one of the table arrays.
    The column I update is not part of a PK
    I catch the error message: ORA-24381
    by using PRAGMA exception_init(dml_errors, -24381);
    and later on :
    WHEN dml_errors THEN
    errors := SQL%BULK_EXCEPTIONS.COUNT;
    FOR i IN 1..sql%BULK_EXCEPTIONS.count LOOP
    lr_logging.parameters:= 'index = ' || sql%BULK_EXCEPTIONS(i).error_index || 'error = ' ||Sqlerrm(-sql%BULK_EXCEPTIONS(i).error_code) ;
    END LOOP;
    I insert these errors in another table. and i get 956 errors
    first one is :
    index = 3error = ORA-00001: unique constraint (.) violated
    last one is
    index = 1000error = ORA-00001: unique constraint (.) violated
    How can this be.Since i don't update in a PKcolumn.
    FULL CODE IS:
    PROCEDURE Update_corr_values( as_checkdate_from IN VARCHAR2,
    as_checkdate_until IN VARCHAR2,
    as_market IN VARCHAR2
    IS
    LS_MODULE_NAME CONSTANT VARCHAR2(30) := 'update_values';
    lr_logging recon_logging.logrec;
    CURSOR lc_update IS
    SELECT /*+ORDERED*/c.rowid,c.ralve_record_id,d.value,c.timestamp,f.value
    FROM rcx_allocated_values a,
    rcx_allocated_values b,
    meter_histories e,
    rcx_allocated_lp_value c,
    rcx_allocated_lp_value d,
    counter_values f
    WHERE a.slp_type NOT IN ('S89', 'S88', 'S10', 'S30') --AELP
    AND b.slp_type IN ('S89', 'S88') --residu
    AND a.valid_from >= to_date(as_checkdate_from,'DDMMYYYY HH24:MI')
    AND a.valid_to <= to_date(as_checkdate_until,'DDMMYYYY HH24:MI')
    AND a.market = as_market
    AND a.market = b.market
    AND a.ean_sup = b.ean_sup
    AND a.ean_br = b.ean_br
    AND a.ean_gos = b.ean_gos
    AND a.ean_dgo = b.ean_dgo
    AND a.direction = b.direction
    AND a.valid_from = b.valid_from
    AND a.valid_to = b.valid_to
    AND c.ralve_record_id = a.record_id
    AND d.ralve_record_id = b.record_id
    AND c.TIMESTAMP = d.TIMESTAMP
    AND e.ASSET_ID = 'KCF.SLP.' || a.SLP_TYPE
    --AND f.timestamp between to_date(gs_checkdate_from,'ddmmyyyy') and to_Date(as_checkdate_until,'ddmmyyyy')
    AND e.SEQ = f.MHY_SEQ
    AND f.TIMESTAMP =c.timestamp - 1/24
    ORDER BY c.rowid;
    TYPE t_value IS TABLE OF RCX_ALLOCATED_LP_VALUE.VALUE%TYPE;
    TYPE t_kcf IS TABLE OF COUNTER_VALUES.VALUE%TYPE;
    TYPE t_timestamp IS TABLE OF RCX_ALLOCATED_LP_VALUE.TIMESTAMP%TYPE;
    TYPE t_ralverecord_id IS TABLE OF RCX_ALLOCATED_LP_VALUE.RALVE_RECORD_ID%TYPE;
    TYPE t_row IS TABLE OF UROWID;
    ln_row t_row :=t_row();
    lt_value t_value := t_Value();
    lt_kcf t_kcf := t_kcf();
    lt_timestamp t_timestamp := t_timestamp();
    lt_ralve t_ralverecord_id := t_ralverecord_id();
    v_bulk NUMBER := 1000;
    val number;
    kcf number;
    ralve number;
    times date;
    dml_errors EXCEPTION;
    errors NUMBER;
    PRAGMA exception_init(dml_errors, -24381);
    BEGIN
    --setting arguments for the logging record
    lr_logging.module := LS_MODULE_NAME;
    lr_logging.context := 'INFLOW_ALL_VALUES_PARTS';
    lr_logging.logged_by := USER;
    lr_logging.parameters := 'Date time started: ' || TO_CHAR(sysdate,'DD/MM/YYYY HH24:MI');
    -- log debugs
    recon_logging.set_logging_env (TRUE, TRUE);
    recon_logging.log_event(lr_logging,'D');
    OPEN lc_update;
    LOOP
    FETCH lc_update BULK COLLECT INTO ln_row,lt_ralve,lt_value,lt_timestamp,lt_kcf LIMIT v_bulk;
    FORALL i IN NVL(lt_value.first,1)..NVL(lt_value.last,0) SAVE EXCEPTIONS
    UPDATE RCX_ALLOCATED_LP_VALUE
    SET VALUE = VALUE * lt_value(i) * lt_kcf(i)
    WHERE rowid =ln_row(i);
    COMMIT;
    lt_value.delete;
    lt_timestamp.delete;
    lt_ralve.delete;
    lt_kcf.delete;
    ln_row.delete;
    EXIT WHEN lc_update%NOTFOUND;
    END LOOP;
    CLOSE lc_update;
    recon_logging.log_event(lr_logging,'D');
    lr_logging.parameters := 'Date time ended: ' || TO_CHAR(sysdate,'DD/MM/YYYY HH24:MI');
    recon_logging.log_event(lr_logging,'D');
    --to be sure
    COMMIT;
    EXCEPTION
    WHEN dml_errors THEN
    recon_logging.set_logging_env(TRUE,TRUE);
    lr_logging.module := 'updatevalues';
    lr_logging.context := 'exception';
    lr_logging.logged_by := USER;
    lr_logging.parameters := 'in dml_errors';
    recon_logging.log_event(lr_logging);
    errors := SQL%BULK_EXCEPTIONS.COUNT;
    lr_logging.parameters:=errors;
    recon_logging.log_event(lr_logging);
    lr_logging.parameters :=('Number of errors is ' || errors);
    --DBMS_OUTPUT.PUT_LINE('Number of errors is ' || errors);
    FOR i IN 1..sql%BULK_EXCEPTIONS.count LOOP
    lr_logging.parameters:= 'index = ' || sql%BULK_EXCEPTIONS(i).error_index || 'error = ' ||Sqlerrm(-sql%BULK_EXCEPTIONS(i).error_code) ;
    recon_logging.log_event(lr_logging);
    END LOOP;
    --recon_logging.set_logging_env(TRUE,TRUE);
    --recon_logging.log_event(lr_logging);
    commit;
    WHEN OTHERS THEN
    lr_logging.module := 'updatevalues';
    lr_logging.context := 'exception';
    lr_logging.logged_by := USER;
    recon_logging.set_logging_env(TRUE,TRUE);
    lr_logging.parameters := 'in others error=' || SQLERRM;
    recon_logging.log_event(lr_logging);
    commit;--to look which is truly the last (else only commit after 1000)
    --raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
    END Update_corr_values;

    Hi,
    No I didn't update a unique constraint.
    But I found out that there is a trigger that causes the unique constraint while updating in the table.
    Silly mistake.Didn't know there was a trigger there.
    Thx anyway.
    Greetz

  • Performance Impact of Unique Constraint on a Date Column

    In a table I have a compound unique constraint which extends over 3 columns. As a part of functionality I need to add another DATE column to this unique constraint.
    I would like to know the performance implications of adding a DATE column to the unique constraint. Would the DATE column behave like another VARCHAR2 or NUMBER column, or would it degrade the performance significantly?
    Thanks
    Message was edited by:
    user627808

    What performance are you concerned about degrading? Inserts? Or queries? If you're talking about queries, what sort of access path are you concerned about?
    Are you concerned that merely changing the definition of the unique constraint would impact performance? Or are you worried that whatever functional change you are making would impact performance (i.e. if you are now retaining historical data in the table rather than just updating it)?
    Regardless of the performance impact, unique indexes (and unique constraints) need to be correct. If you need to allow duplicates on the 3 current columns with different dates, then you would need to change the unique constraint definition regardless of the performance impact. Fast and wrong generally isn't going to be preferrable to slow and right.
    Generally, though, there probably is no reason to be terribly concerned about performance here. Indexing a date is no different than indexing any other primitive data type.
    Justin

  • UNIQUE constraint on a varchar column

    I have a (non-key) varchar2 column that I need to be unique. I specify UNIQUE in the table create line like:
    create table tester(
    id number primary key,
    field varchar2(255) UNIQUE
    but it doesn't behave as expected. The following statements don't cause a constraint violation:
    insert into tester values(1,'text');
    insert into tester values(2,'tEXT');
    That is, UNIQUE on a varchar column is case sensitive. How can I create a case-insensitive UNIQUE constraint?
    null

    Take a look at the 'new' feature named function based indexes. I do not now if you can create a unique this way but at least you can try. Keep us informed please.

  • HOWTO: Add a UNIQUE constraint to a populated column

    Here is the way to add a unique constraint to a populated column, ensuring that the existing values are unique as well.
    ALTER TABLE t1
    ADD CONSTRAINT t1_uk UNIQUE (col1,col2)
    EXCEPTIONS INTO my_exceptions
    /If the alter table statement fails this will populate the MY_EXCEPTIONS table with the rows that contain duplicate values for (col1,col2). These are identified by ROWID. We can then chose to:
    [list]
    [*]delete rows with a bad key;
    [*]amend the values of the key columns;
    [*]re-apply the constraint with the NOVALIDATE option.
    [list]
    We should be wary of choosing the NOVALIDATE option. There's usually a good reason why the unique constraint is required and we should not circumvent it. Apart from anything else, Oracle allows us to build foreign keys referencing NOVALIDATE unique keys. This could result in child rows that have two parents, which is normal in biology, but very wrong in a database.
    NOVALIDATE is useful in datawarehouses and suchlike, because little updating occurs and the data integrity issues are of less imporatance. I don't think it ought to be used in OLTP situations. The code example at the end of this posting illustrates why we should exercise caution with NOVALIDATE.
    Once we have handled the duplicate values we can re-run the alter table statement and apply the constraint.
    If you don't already have an EXCEPTIONS table (it can be called anything, it's the structure that counts) you may need to run (or get a DBA to run) a script called UTLEXCPT.SQL, which will be in the $ORACLE_HOME/rdbms/admin directory.
    Cheers, APC
    SQL> SELECT col1, col2, col3 FROM t1;
          COL1       COL2       COL3                                               
             1          1          0                                               
             2          1          0                                               
             2          1          0                                               
    SQL> SELECT col1, col2, cola FROM t2;
          COL1       COL2 COLA                                                     
             1          1  I'm child #1                                                        
             1          1  I'm child #2                                                        
             2          1  I'm child #3                                                        
    SQL> ALTER TABLE t1
      2  ADD CONSTRAINT t1_uk UNIQUE (col1, col2);
    ALTER TABLE t1 ADD CONSTRAINT t1_uk UNIQUE (col1, col2)
    ERROR at line 1:
    ORA-02299: cannot validate (TST2.T1_UK) - duplicate keys found We can't add a unique key, so we decide to use the NOVALIDATE clause.
    SQL> CREATE INDEX t1_i ON t1(col1, col2);
    Index created.
    SQL> ALTER TABLE t1
      2  ADD CONSTRAINT t1_uk UNIQUE (col1, col2) ENABLE NOVALIDATE;
    Table altered.
    SQL> INSERT INTO t1 VALUES (2, 1, 1);
    insert into t1 values (2, 1, 1)
    ERROR at line 1:
    ORA-00001: unique constraint (TST2.T1_UK) violated Well, we can't add any more duplicate keys, so that's alright isn't it? Nope. We can add a foreign key to table T2 referencing T1 but we don't know which row in T1 is the parent of the rows in T2.
    SQL> ALTER TABLE t2
      2  ADD CONSTRAINT t2_t1_fk foreign key  (col1, col2)
      3  REFERENCES t1(col1, col2)
    Table altered.
    SQL> SELECT rowid FROM t1 WHERE col1 = 2;
    ROWID                                                                          
    AAAVnMAANAAAB96AAB                                                             
    AAAVnMAANAAAB96AAC                                                             
    SQL> DELETE FROM t1 WHERE rowid = 'AAAVnMAANAAAB96AAB';
    1 row deleted.
    SQL> DELETE FROM t1 WHERE rowid = 'AAAVnMAANAAAB96AAC';
    DELETE FROM t1 WHERE rowid = 'AAAVnMAANAAAB96AAC'
    ERROR at line 1:
    ORA-02292: integrity CONSTRAINT (TST2.T2_T1_FK) violated - child record found
    SQL> ROLL
    Rollback complete.
    SQL> DELETE FROM t1 WHERE rowid = 'AAAVnMAANAAAB96AAC';
    1 row deleted.
    SQL> DELETE FROM t1 WHERE rowid = 'AAAVnMAANAAAB96AAB';
    DELETE FROM t1 WHERE rowid = 'AAAVnMAANAAAB96AAB'
    ERROR at line 1:
    ORA-02292: integrity CONSTRAINT (TST2.T2_T1_FK) violated - child record found
    SQL>  ROLL
    Rollback complete.
    Why this matters: queries joining child and parent tables return more rows than we'd expect normally.
    SQL> SELECT t2.cola
      2  FROM   t2
      3  WHERE  t2.col1 = 2
      4  and    t2.col2 = 1;
    COLA                                                                           
    I'm child #3                                                                   
    SQL> SELECT t2.cola, t1.col4
      2  FROM   t1, t2
      3  WHERE  t2.col1 = 2
      4  AND    t2.col2 = 1
      5  AND    t1.col1 = 2
      6  AND    t2.col2 = 1;
    COLA                    COL4                                                   
    I'm child #3            I'm the daddy                                          
    I'm child #3            No, I'm the daddy!!                                    
    SQL> Caveat emptor
    This posting is issued on behalf of the Rogue Moderators. It is posted with the best of intentions but is not guaranteed in any way, shape or form. In particular, the code is presented "as is" and you assume full responsibility for running it on your system. Furthermore, you must not download and install software from the internet unless you know what you are doing and have the permission of whoever owns your system. It was never this hard for the Lone Ranger.

    Hi,
    You can not create unique key with duplicate values as you know. Now if you want to create unique key then you have to delete duplicate records from the table but this again if you can afford to delete because this data may be more importante to you and you can not delete any record.
    or you can use ENABLE NOVALIDATE option of oracle explain by Tom on below link.
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:8806498660292
    or if you dont want to use Tom's way then you go with primary key like
    Drop old primary key if there is already on the column.
    create new primary key with enable novalidate option.

  • Difference between unique constraint and unique index

    1. What is the difference between unique constraint and unique index when unique constraint is always indexed ? Which one is better in this case for better performance ?
    2. Is Composite index of 3 columns x,y,z better
    or having independent/ seperate indexes on 3 columns x,y,z is better for better performance ?
    3. It has been very confusing for me to decide which columns to index, I have indexed most foreignkey columns, is it a good idea ? We do lot of selects and DMLS on most of our tables. Is there any query that I can run and find out if indexes are really being used and if they are improving any performance. I have analyzed and computed my indexes using ANALYZE index index_name validate structure and COMPUTE STATISTICS;
    null

    1. Unique index is part of unique constraint. Of course you can create standalone unique index. But is is no point to skip the logical view of business if you spend same effort to achive.
    You create unique const. Oracle create the unique index for you. You may specify index characteristic in unique constraint.
    2. Depends. You can't utilize the composite index if the searching condition is not whole or front part of the indexing key. You can't utilize your index if you query the table for y=2. That is.
    3. As old words in database arena, Index may be good or bad for a table depending on the size of table, number of columns in the table... etc. It is very environmental dependent. In fact, It is part of database nomalization. Statistic is a way oracle use to determine the execution plan.
    Steve
    null

  • Unique Index vs. Unique Constraint

    Hi All,
    I'm studying for the Oracle SQL Expert Certification. At one point in the book, while talking about indices, the author says that a unique index is not the same a unique constraint. However, he doesn't explain why they're two different things.
    Could anyone clarify the difference between the two, please?
    Thanks a lot,
    Valerio

    A constraint has different meaning to an index. It gives the optimiser more information and allows you to have foreign keys on the column, whereas a unique index doesn't.
    eg:
    SQL> create table t1 (col1 number, col2 varchar2(20), constraint t1_uq unique (col1));
    Table created.
    SQL> create table t2 (col1 number, col2 varchar2(20));
    Table created.
    SQL> create unique index t2_idx on t2 (col1);
    Index created.
    SQL> create table t3 (col1 number, col2 number, col3 varchar2(20), constraint t3_fk
      2                   foreign key (col2) references t1 (col1));
    Table created.
    SQL> create table t4 (col1 number, col2 number, col3 varchar2(20), constraint t4_fk
      2                   foreign key (col2) references t2 (col1));
                     foreign key (col2) references t2 (col1))
    ERROR at line 2:
    ORA-02270: no matching unique or primary key for this column-listIt's like saying "What's the difference between a car seat and an armchair? They both allow you to sit down!"

  • ORA-00001 - unique constraint violation when upgrading 10g EUL

    Hi,
    I am trying to upgrade my Discoverer 4i to Discoverer 10g.
    When I log into 10g, it prompts me to upgrade the EUL. After making the right back up of my 4i EUL, I continue with the upgrade.
    During the upgrade, I am hit with this error:
    Database error: ORA-00001 unique constraint (EUL_HRMS.EUL5_FOL_UK_1) violated.
    I understand that this happens when user tries to insert an already existing value into a column defined as unique. However, I am not sure on how to resolve it.
    Can anyone please advice.
    Thanks in advance!
    Regards,
    Harpreet Sidhu

    Hi Rod,
    I've run the queries and these are the results. Each query returned one row.
    1. SELECT FROM EUL_HRMS.EUL5_DOC_FOLDERS*
    FOL_ID     100057
    FOL_NAME     ROOT
    FOL_DEVELOPER_KEY     ROOT
    FOL_DESCRIPTION     
    FOL_EU_ID     100000
    FOL_PARENT_ID     
    FOL_USER_PROP2     
    FOL_USER_PROP1     
    FOL_ELEMENT_STATE     0
    FOL_CREATED_BY     EUL_HRMS
    FOL_CREATED_DATE     19-Jun-09
    FOL_UPDATED_BY     EUL_HRMS
    FOL_UPDATED_DATE     19-Jun-09
    NOTM     0
    2. SELECT EU_ID, EU_SECURITY_MODEL, EU_USE_PUB_PRIVS, EU_ROLE_FLAG
    FROM EUL_HRMS.EUL5_EUL_USERS
    WHERE EU_USERNAME = 'PUBLIC'
    EU_ID     3000
    EU_SECURITY_MODEL     0
    EU_USE_PUB_PRIVS     1
    EU_ROLE_FLAG     0
    Thanks!

  • ORA-00001 - Unique Constraint error in Oracle forms 6i

    Hi,
    I am using Forms 6i. I have an issue while inserting records into a custom table.  Below is the functionality.
    When I check the check box,  and press the 'APPROVE' button, the record gets inserted into the custom table. But while inserting I am getting 'ora-00001-unique constraint violated error'.
    But the custom table doesn't have any data in it. (So the inserting record should not be a duplicate record).
    Any suggestions would be of great help.
    Thanks
    Deepti

    Is it a sql statement that is performing the insert, or are you using the native data block DML functionality in your form?  Secondly have you identified candidate columns that could be causing your issue?
    If you are using sql statement have you debugged to comfirm that you are not firing the same block of code more that once, and that if it is required to execute multiple times are you incrementing the sequence values that should be unique.
    Regards
    Q

  • Add a unique constraint on binary XML table

    How add a unique constraint of "brevet" field?
    The following INSERT failed
    SQL Error: ORA-19025: EXTRACTVALUE renvoie la valeur d'un seul noeud
    19025. 00000 - "EXTRACTVALUE returns value of only one node"
    If the ALTER is made after the INSERT is done, INSERT is valid but ALTER failed with the same error message!
    /* copy the file compavions.xml
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <compagnie>
         <comp>AB</comp>
         <flotte>
              <avion immat="F-WTSS" capacite="90">
                   <typeAv>Concorde</typeAv>
              </avion>
              <avion immat="F-GFDR" capacite="145">
                   <typeAv>A320</typeAv>
              </avion>
              <avion immat="F-GTYA" capacite="150">
                   <typeAv>A320</typeAv>
              </avion>
         </flotte>
         <nomComp>Air Blagnac</nomComp>
         <pilotes>
              <pilote>
              <brevet>PL-1</brevet>
              <nom>C. Sigaudes</nom>
              </pilote>
              <pilote>
              <brevet>PL-2</brevet>
              <nom>P. Filloux</nom>
              </pilote>
         </pilotes>
    </compagnie>
    in C:\...
    --DROP DIRECTORY repxml;
    --CREATE DIRECTORY repxml AS 'C:\...';
    DROP TABLE pilote_binary_xml5;
    CREATE TABLE pilote_binary_xml5 OF XMLType
    XMLTYPE STORE AS BINARY XML
    VIRTUAL COLUMNS
    (col AS (EXTRACTVALUE(OBJECT_VALUE, '/compagnie/pilotes/pilote/brevet')));
    ALTER TABLE pilote_binary_xml5 ADD CONSTRAINT brevet_unique UNIQUE (col);
    INSERT INTO pilote_binary_xml5 VALUES (XMLType(BFILENAME ('REPXML','compavions.xml'), NLS_CHARSET_ID ('AL32UTF8')));
    --ALTER TABLE pilote_binary_xml5 ADD CONSTRAINT brevet_unique UNIQUE (col);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

    You could try something like
    (extract(OBJECT_VALUE,compagnie/pilotes/pilote/brevet').getStringVal());
    but this is probably unadvisable.
    I suggest an alternative is for you to look at XMLINDEX so that you can bring the 'proper' XML functions into play like XMLTABLE etc.

  • ASCP erroring out with ORA-00001: unique constraint (MSC.MSC_SETUP_TRANSITI

    Here is log
    =====================================================
    18-AUG 11:06:25 : ======================================== 18-AUG
    11:06:25 : Error in PROCEDURE=LOAD_SETUP_TRANSITION, TABLE=MSC_SETUP_TRANSITIONS 18-AUG 11:06:27 : COLUMN=ORGANIZATION_CODE,
    VALUE=TST:M1 18-AUG 11:06:27 : COLUMN=RESOURCE_ID, VALUE=14 18-AUG
    11:06:27 : COLUMN=FROM_SETUP_ID, VALUE=1 18-AUG 11:06:27 :
    COLUMN=TO_SETUP_ID, VALUE=2 18-AUG 11:06:27 : ORA-00001: unique constraint (MSC.MSC_SETUP_TRANSITIONS_U1) violated 18-AUG 11:06:27 :
    ======================================== 18-AUG 11:06:27 : Error in PROCEDURE=LOAD_SETUP_TRANSITION, TABLE=MSC_SETUP_TRANSITIONS 18-AUG
    11:06:27 : COLUMN=ORGANIZATION_CODE, VALUE=TST:M1 18-AUG 11:06:27 :
    COLUMN=RESOURCE_ID, VALUE=14 18-AUG 11:06:27 : COLUMN=FROM_SETUP_ID,
    VALUE=2 18-AUG 11:06:28 : COLUMN=TO_SETUP_ID, VALUE=1 18-AUG 11:06:28 :
    ORA-00001: unique constraint (MSC.MSC_SETUP_TRANSITIONS_U1) violated 18-AUG 11:06:28 : ======================================== 18-AUG
    11:06:28 : Error in PROCEDURE=LOAD_SETUP_TRANSITION, TABLE=MSC_SETUP_TRANSITIONS 18-AUG 11:06:28 : COLUMN=ORGANIZATION_CODE,
    VALUE=TST:M1 18-AUG 11:06:28 : COLUMN=RESOURCE_ID, VALUE=16 18-AUG
    11:06:28 : COLUMN=FROM_SETUP_ID, VALUE=1 18-AUG 11:06:28 :
    COLUMN=TO_SETUP_ID, VALUE=2 18-AUG 11:06:28 : ORA-00001: unique constraint (MSC.MSC_SETUP_TRANSITIONS_U1) violated 18-AUG 11:06:28 :
    ======================================== 18-AUG 11:06:28 : Error in PROCEDURE=LOAD_SETUP_TRANSITION, TABLE=MSC_SETUP_TRANSITIONS 18-AUG
    11:06:28 : COLUMN=ORGANIZATION_CODE, VALUE=TST:M1 18-AUG 11:06:28 :
    COLUMN=RESOURCE_ID, VALUE=16 18-AUG 11:06:28 : COLUMN=FROM_SETUP_ID,
    VALUE=2 18-AUG 11:06:28 : COLUMN=TO_SETUP_ID, VALUE=1 18-AUG 11:06:28 :
    ORA-00001: unique constraint (MSC.MSC_SETUP_TRANSITIONS_U1) violated 18-AUG 11:06:28 : Total resource transition = 167 18-AUG 11:06:28 : .1 minutes elapsed.
    18-AUG 11:06:30 : Procedure MSC_CL_RPO_ODS_LOAD.LOAD_IRO_DEMAND;
    started. 18-AUG 11:06:31 : <<LOAD_IRO_DEMAND>> 18-AUG 11:06:31 :
    <<CURSOR>>INSERT /*+ APPEND */ INTO DEMANDS_TST( PLAN_ID, DEMAND_ID, DISPOSITION_ID, INVENTORY_ITEM_ID, ORGANIZATION_ID, USING_ASSEMBLY_ITEM_ID, USING_ASSEMBLY_DEMAND_DATE, USING_REQUIREMENT_QUANTITY, QUANTITY_PER_ASSEMBLY, ISSUED_QUANTITY, ASSEMBLY_DEMAND_COMP_DATE, DEMAND_TYPE, ORIGINATION_TYPE, SOURCE_ORGANIZATION_ID, RESERVATION_ID, OP_SEQ_NUM, DEMAND_CLASS, REPETITIVE_SCHEDULE_ID, SR_INSTANCE_ID, PROJECT_ID, TASK_ID, PLANNING_GROUP, UNIT_NUMBER, ORDER_NUMBER, REPAIR_LINE_ID, WIP_ENTITY_ID, WIP_ENTITY_NAME, WIP_STATUS_CODE, WIP_SUPPLY_TYPE, ASSET_ITEM_ID, ASSET_SERIAL_NUMBER, COMPONENT_SCALING_TYPE, COMPONENT_YIELD_FACTOR,null,null, REFRESH_NUMBER, LAST_UPDATE_DATE, LAST_UPDATED_BY, CREATION_DATE, CREATED_BY)SELECT -1, MSC_DEMANDS_S.nextval, NVL(ms.TRANSACTION_ID,-1) DISPOSITION_ID, t1.INVENTORY_ITEM_ID, msd.ORGANIZATION_ID, t2.INVENTORY_ITEM_ID USING_ASSEMBLY_ITEM_ID, nvl(msd.USING_ASSEMBLY_DEMAND_DATE,ms.new_schedule_date),
    msd.USING_REQUIREMENT_QUANTITY, msd.QUANTITY_PER_ASSEMBLY, msd.QUANTITY_ISSUED, msd.ASSEMBLY_DEMAND_COMP_DATE, msd.DEMAND_TYPE, msd.ORIGINATION_TYPE, msd.SOURCE_ORGANIZATION_ID, msd.RESERVATION_ID, msd.OPERATION_SEQ_NUM, msd.DEMAND_CLASS, msd.REPETITIVE_SCHEDULE_ID, msd.SR_INSTANCE_ID, msd.PROJECT_ID, msd.TASK_ID, msd.PLANNING_GROUP, msd.END_ITEM_UNIT_NUMBER,
    REPLACE(REPLACE(substr(msd.ORDER_NUMBER,1,62),:v_chr10),:v_chr13)
    ORDER_NUMBER, REPAIR_LINE_ID , msd.WIP_ENTITY_ID, msd.WIP_ENTITY_NAME, msd.WIP_STATUS_CODE, msd.WIP_SUPPLY_TYPE, t3.inventory_item_id ASSET_ITEM_ID, msd.ASSET_SERIAL_NUMBER, msd.COMPONENT_SCALING_TYPE, msd.COMPONENT_YIELD_FACTOR,null,null, :v_last_collection_id, :v_current_date, :v_current_user, :v_current_date, :v_current_user FROM MSC_ITEM_ID_LID t1, MSC_ITEM_ID_LID t2, MSC_ITEM_ID_LID t3,SUPPLIES_TST ms, MSC_ST_DEMANDS msd WHERE msd.SR_INSTANCE_ID= 21 AND msd.ORIGINATION_TYPE = 77 AND msd.DELETED_FLAG= 2 AND t1.SR_INVENTORY_ITEM_ID= msd.inventory_item_id AND t1.sr_instance_id= msd.SR_INSTANCE_ID AND t2.SR_INVENTORY_ITEM_ID= msd.using_assembly_item_id AND t2.sr_instance_id= msd.SR_INSTANCE_ID AND t3.SR_INVENTORY_ITEM_ID (+)= msd.ASSET_ITEM_ID AND t3.sr_instance_id (+) = msd.SR_INSTANCE_ID AND ms.sr_instance_id= msd.SR_INSTANCE_ID AND ms.ORGANIZATION_ID= msd.ORGANIZATION_ID AND ms.DISPOSITION_ID= msd.repair_line_id AND ms.plan_id=-1 AND ms.ORDER_TYPE= 75 18-AUG
    11:06:31 : ORA-01747: invalid user.table.column, table.column, or column specification 18-AUG 11:06:31 : .1 minutes elapsed.
    ===================================================
    any help is appreciated. Just got this Bug 8661320, ref with no help. Its on R12 12.1.1

    Sundeep,
    No similar errors are reported in Metalink, so I would suggest you log a SR.
    Regards,
    Hussein

  • Adding a UNIQUE Constraint to an existing table

    Hi,
    I got this issue because of the existing data. My issue is in my table I want to add a unique constraint to two columns but i cannot add this becuase of the existing repeating data. And I cannot do a data repair to fix the repeating data since the customer is reling on this data so we can not get the decision to repair the data.
    As a solution I try this method, by adding a function to check the repeating data before inserting the data to the table. It's working fine to a user but when it come to multiple users it's not working because users can log to the database and can do their transactions simultaneously.
    My question is; is there a way in oracle to add a constraint to the data that can add in future not to the old existing data?
    Thanks,
    Darex.

    user9359353 wrote:
    Hi,
    As a solution I try this method, by adding a function to check the repeating data before inserting the data to the table. It's working fine to a user but when it come to multiple users it's not working because users can log to the database and can do their transactions simultaneously.
    show us what is "not working". if you are calling this function from a trigger the correct way, the first person to commit will have their data inserted and the next person will not be able to insert.
    edit: you may want to have a read through this thread: where I was encountering a problem with multi-row validation using triggers:
    Row level validation dependant on other rows?
    note this post:
    Rob van Wijk wrote:
    Hi WhiteHat,
    Here are two blogposts of mine about this subject that you might find useful.
    One with some guidelines about implementing entity rules: http://rwijk.blogspot.com/2008/08/implementing-entity->rules.html
    And one with an example how to implement (among others) an overlap check in the context of another option for your >question, the product RuleGen: http://rwijk.blogspot.com/2008/05/rulegen-test.html
    Hope this helps.
    Regards,
    Rob.Edited by: WhiteHat on Jun 8, 2011 3:51 PM

Maybe you are looking for

  • How can I virtualize Lion if I bought a new Mac with Lion preinstalled?

    Hi folks. I read that you were allowed to virtualize 1 instance of Lion after purchasing Lion.  How can I virtualize Lion if I don't have any install media with one of the new macs?

  • ITunes option to automatically open/sync no longer available.

    Is it just me or has the latest iTunes update made things worse... Has the great APPLE gone PEAR shaped?! I used to plug in my iPhone and iTunes would open and sync, I updated both iTunes 10.2.1 and iOS3, seemingly a big mistake. Also my MAC desktop

  • Next machine build coming. What video card?

    My graphics computer is now a few years old, and I am about to build a couple of machines for myself and a colleague. As usual I'll be installing a high quality mother board, the fastest processor we can afford. loaded with as much matched memory as

  • Navigating out of jsff

    I have a main.jsf page divided by panel splitter in left and right facets. Left one is holding links to activate two different jsff at dynamic region. One of fragments holds a read-only table from which I want to navigate out to edit page ( Edit.jsf

  • 2LIS_17_I3OPER  -  Missing Operations

    Hello, We are in the build cycle of an implementation.  During FUT testing it was noticed that some PM Operation records are not getting onto the BI extractor. Upon careful review we noticed that only Operations which are assigned a component (check