2017-07-01 78 views
0

我想在後者的主鍵和另一個表的主鍵之間的表上包含一個檢查約束並插入! =兩者之間,我該怎麼做? 我一直很想這樣的:Oracle Sql Check Constraint!=其他表

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