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: Implementing complicated constraints

Re: Implementing complicated constraints

From: Rene Nyffenegger <rene.nyffenegger_at_gmx.ch>
Date: 28 Sep 2004 12:39:18 GMT
Message-ID: <slrnclimr2.2rc.rene.nyffenegger@zhnt60m34.netarchitects.com>


In article <cjbb40$b0d$1_at_news.caesar.elte.hu>, Agoston Bejo wrote:
> Hi, I'm having trouble with implementing some constraints on the database
> level. An example:
>
> --Table A(AID, BID ref. B.BID, ATXT)
> --Table B(BID, CID ref. C.CID)
> --Table C(CID)
>
> upon insertion into or updating in A I would like to force that ATXT is
> unique with respect to CID, i.e.
>
> SELECT COUNT(*) FROM A,B,C
> WHERE A.BID = B.BID
> AND B.CID = CID
> AND CID = fn_get_cid_for_bid(:new.BID)
> AND A.ATXT = :new.ATXT
> AND A.AID <> :new.AID
>
> should be 0.
>
> This I cannot force with a check constraint since it is not allowed to
> contain subqueries.
> If I try to write a trigger that checks the above condition and raises an
> application error, then I always stumble upon the "table is mutating,
> trigger/function may not see it" -type error, since it involves a select on
> the table that is being changed at the time.
>
> However, it would be better to implement such a constraint on the database
> level, rather than scatter checks throughout the application.
>
> Is there a standard way solve this type of problem?

I am not sure if I understood 100% what you need, but if I did, ATXT belongs to table B, not to A.

Rene

-- 
  Rene Nyffenegger
  http://www.adp-gmbh.ch/
Received on Tue Sep 28 2004 - 07:39:18 CDT

Original text of this message

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