2017-07-01 15 views
0

私は後者の主キーの間に、テーブルと他のテーブルの主キーのチェック制約を含めると、挿入したいです! = 2人の間で、どうすればいいですか? 私はこのように誘惑してきた:のOracle SQL制約をチェック!=他のテーブル

CREATE TABLE RESPONSABILE(
    ID_RESP    CHAR(10)  REFERENCES UTENTE(ID_USER) PRIMARY KEY, 
    CODICE_FISCALE  VARCHAR(16)  NOT NULL UNIQUE, 
    NOME    VARCHAR(15)  NOT NULL, 
    COGNOME    VARCHAR(15)  NOT NULL, 
    CONSTRAINT CK_FI CHECK   (REGEXP_LIKE(CODICE_FISCALE,'^[A-Z]{6}[\d+]{2}[ABCDEHLMPRST]{1}[\d+]{2}([A-Z]{1}[\d+]{3})[A-Z]{1}$','I')), 
    CONSTRAINT CK_RE CHECK   (ID_RESP != (ID_PR) REFERENCES PR(ID_PR) AND ID_RESP != (ID_CLIENTE) REFERENCES CLIENTE(ID_CLIENTE)) 
); 

しかし、あなたの主キーが配列から得られた数値であるならば、私は、任意の正の結果にあなたがしようとしているものを達成するための最良の方法を

+0

質問を編集し、(1)サンプルデータと(2)制約のチェック対象の説明。 –

+0

はあなたが後にしている何https://stackoverflow.com/q/21098932/458741ですか? [定義]から – Ben

+0

(https://www.techonthenet.com/oracle/check.php)制約自体のは、範囲は、一つのテーブルに限定されます。ですから、何をしようとしているのかは、他のアプローチをとる必要があります。 –

答えて

0

あなたがマルチ表チェック制約を施行することを、あなたの文法的に間違ったチェック制約のテキストから表示されます。 Oracle(およびおそらく任意のRDBMS)でこれを実行する唯一の方法は、トリガーを使用することです。チェック制約内で複数のテーブルを参照することはできません。しかし

、Oracleのバージョンに応じて、およびthe Oracle constraint documentationによると、あなたはこれが暗示するように、かなり複雑な外部キー制約を定義することができるかもしれない:

あなたは、CREATE TABLEで外部キー制約を定義することはできませんAS副照会文節を含むステートメント。代わりに、制約なしでテーブルを作成し、後でALTER TABLEステートメントを使用してテーブルを追加する必要があります。

0

を持っていませんでした両方のテーブルのID番号を同じシーケンスから取得することです。このようにすれば、お互いが重複しないことが保証され、この状態を確認するための高価なロジックが不要になります。

運のベスト。

+0

テーブルは母エンティティからIDを取るので、私は、この制約を配置する必要がありますので、私はデータベースを作成するスクリプトを使用することができます – Rock

関連する問題