Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: select + insert vs. insert and catching exception

Re: select + insert vs. insert and catching exception

From: Marc Blum <marc_at_marcblum.de>
Date: Sun, 29 Sep 2002 10:31:09 +0200
Message-ID: <kcedpukpsq5s5b7f7b1dgs80uscmd3v3aa@4ax.com>


On Thu, 26 Sep 2002 21:09:15 GMT, Karsten Farell <kfarrell_at_medimpact.com> wrote:

>Okay, here's what I was thinking about when I wrote that. Perform this
>little test:
>
>create table t1 (
> pk number not null,
> constraint pk1 primary key (pk)
>);
>create table t2 (
> pk number not null,
> fk number
>);
>alter table t2 add (
> constraint fk2 foreign key (fk) references t1 (pk)
>);
>insert into t1 values (100);
>insert into t2 values (200, 100);
>update t1 set pk=999 where pk=100;
>ERROR at line 1:
>ORA-02292: integrity constraint (owner.FK2) violated - child record found
>

But you can avoid that one with deferrable constraints. Look:

SQL> DROP TABLE t2;

Tabelle wurde gelöscht.

SQL> DROP TABLE t1;

Tabelle wurde gelöscht.

SQL>
SQL> create table t1 (

  2     pk number not null,
  3     constraint pk1 primary key (pk)

  4 );

Tabelle wurde angelegt.

SQL>
SQL> create table t2 (

  2     pk number not null,
  3     fk number

  4 );

Tabelle wurde angelegt.

**Now add a deferrable FK:**

SQL>
SQL> alter table t2 add (

  2     constraint fk2 
  3     foreign key (fk) 
  4     references t1 (pk)
  5     DEFERRABLE
  6     INITIALLY DEFERRED

  7 );

Tabelle wurde geändert.

SQL>
SQL> insert into t1 values (100);

1 Zeile wurde erstellt.

SQL> insert into t2 values (200, 100);

1 Zeile wurde erstellt.

SQL> COMMIT; Transaktion mit COMMIT abgeschlossen.

SQL> **The following UPDATE doesn't result in an error:**

SQL> update t1 set pk=999 where pk=100;

1 Zeile wurde aktualisiert.

**Now update all childs (of course a trigger could do that):**

SQL> update t2 set fk=999 where fk=100;

1 Zeile wurde aktualisiert.

SQL> COMMIT; Transaktion mit COMMIT abgeschlossen.

Marc Blum
mailto:marc_at_marcblum.de
http://www.marcblum.de Received on Sun Sep 29 2002 - 03:31:09 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US