2017-07-01 57 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