在SQL中违反约束

时间:2014-03-24 04:17:07

标签: sql oracle check-constraints

我创建了表格:

CREATE TABLE SALES_ORDER2_56 (
    ORDERNO VARCHAR2 (6) CONSTRAINT SOpkey1 PRIMARY KEY CONSTRAINT SOcheck1 CHECK (ORDERNO LIKE 'O%'),
    CLIENTNO VARCHAR2 (6) CONSTRAINT SOfkey1 REFERENCES CLIENT_MASTER2_56 (CLIENTNO),
    ORDERDATE DATE CONSTRAINT SOnull1 NOT NULL,
    DELYADDR VARCHAR2 (25),
    SALESMANNO VARCHAR2 (6) CONSTRAINT SOfkey2 REFERENCES SALESMAN_MASTER2_56 (SALESMANNO),
    DELYTYPE CHAR (1) DEFAULT 'F',
    CONSTRAINT SOcheck2 CHECK (
        DELYTYPE LIKE 'F'
        OR DELYTYPE LIKE 'P'
    ),
    BILLYN CHAR (1),
    DELYDATE DATE,
    ORDERSTATUS VARCHAR2 (10),
    CHECK (
        ORDERSTATUS IN (
            'In Process',
            'Fulfilled',
            'BackOrder',
            'Cancelled'
        )
    ),
    CONSTRAINT SOcheck3 CHECK (DELYDATE > ORDERDATE)
);

但每当我尝试运行时:

INSERT INTO SALES_ORDER2_56 (ORDERNO,CLIENTNO,ORDERDATE,SALESMANNO,DELYTYPE,BILLYN,DELYDATE,ORDERSTATUS)
    VALUES('O19001','C00001','12-jun-04','S00001','F','N','20-jul-04','In Process');

它给了我: [Err] ORA-02291:违反了完整性约束(SCOTT.SOFKEY2) - 未找到父键

我尝试了很多次但是徒劳无功。非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

  

这个回答是对问题的原始版本的回应,   它已被编辑,使答案看起来无关紧要。

CHECK的{​​{1}}约束要求ORDERSTATUSORDERSTATUSIn ProgressFulfilledBackOrder之一,但在您的插入查询中,您使用违反约束的Cancelled。我猜你打算用In Process


错误In Progress

表示SALESMANNO S00001在SALESMAN_MASTER2_56表中不存在