adding a constraint to child table that references a column of the parent table that is not part of the primary key

From: yossarian <yossarian99_at_operamail.com>
Date: Fri, 29 Jan 2010 12:18:26 +0100
Message-ID: <4b62c402$0$707$5fc30a8_at_news.tiscali.it>



Hello, Oracle 10.2.0.3 on Linux here.

I have two tables, P (parent table) and D (data table):

hr_at_> create table p ( pid integer primary key, ptype varchar2(1) not null, pname varchar2(80) not null ) ;

Table created.

hr_at_> create table d ( pid integer not null, ddate date not null, dstuff varchar2(80), primary key (pid,ddate), foreign key (pid) references p ) ;

Table created.

I would like to add a constraint that prevents to insert two parents of the same type in the same date. For example:

hr_at_> insert into p values (1,'A','1A');

1 row created.

hr_at_> insert into p values (2,'B','2B');

1 row created.

hr_at_> insert into p values (3,'B','3B');

1 row created.

hr_at_> insert into d values (1,date'2010-01-01','ldldldl');

1 row created.

hr_at_> insert into d values (2,date'2010-01-01','kdkdkdk');

1 row created.

hr_at_> insert into d values (3,date'2010-01-01','kasdflkddd');

I wish to reject this last insert because I already have a row of type B  in date 2010-01-01.

This is impossible to implement neither with standard constraints nor with triggers (because of the "table is mutating..." error).

Any suggestion?

Thank you, Y. Received on Fri Jan 29 2010 - 05:18:26 CST

Original text of this message