And to answer your second question based on the example I linked in my
previous message:
SQL> create table OFFER (
CON> OFFER_ID bigint generated always as identity primary key,
CON> PRODUCT_ID bigint not null,
CON> ARCHIVED boolean default false not null,
CON> PRICE decimal(9,2) not null
CON> );
SQL> create unique index IDX_OFFER_UNIQUE_PRODUCT
CON> on OFFER (PRODUCT_ID)
CON> where not ARCHIVED;
SQL> insert into OFFER (PRODUCT_ID, ARCHIVED, PRICE) values (1, false,
18.95);
SQL> insert into OFFER (PRODUCT_ID, ARCHIVED, PRICE) values (1, true,
17.95);
SQL> insert into OFFER (PRODUCT_ID, ARCHIVED, PRICE) values (1, true,
16.95);
SQL> update offer set archived = false;
Statement failed, SQLSTATE = 23000
attempt to store duplicate value (visible to active transactions) in
unique index "IDX_OFFER_UNIQUE_PRODUCT"
-Problematic key value is ("PRODUCT_ID" = 1)
SQL>
Mark
--
Mark Rotteveel