oracle SQL问题ORA-02438无法创建表[关闭]

km0tfn4u  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(173)

已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
关闭7天前。
Improve this question
错误代码:
ORA-02438:列检查约束无法引用其他列
02438. 00000 -“列检查约束无法引用其他列”
原因:试图定义引用另一列的列检查约束。
操作:将其定义为表检查约束。

CREATE TABLE crime_charges 
(
    charge_id number(10) CONSTRAINT crime_charges_id_pk PRIMARY KEY,
    crime_id number(9) CONSTRAINT crime_charges_crime_id_fk
                       REFERENCES crimes(crime_id),
    crime_code number(3) CONSTRAINT crime_charges_crime_code_fk
                         REFERENCES crime_codes (crime_code),
    charge_status varchar2(2),
    fine_amount number(2),
    court_fee number(7),
    amount_paid number(7),
    pay_due_date date
    CONSTRAINT charge_status_CHECK
        CHECK (charge_status IN ('PD','GL', 'NG'))
);

不让我创建表,我试图找到解决方案,但没有出现

brqmpdu1

brqmpdu11#

这是关于一个缺少逗号错位的约束子句。因为,按照你的说法,Oracle * 认为 * 你正在pay_due_date列上创建检查约束,它(Oracle)不会让你这样做,因为列检查约束不能引用其他列。
然而,如果你把它放在一个表级(第一个例子)或适当的列(第二个例子),那么它就像预期的那样工作。

SQL> CREATE TABLE crime_charges (
  2      charge_id     NUMBER(10)
  3          CONSTRAINT crime_charges_id_pk PRIMARY KEY,
  4      crime_id      NUMBER(9)
  5          CONSTRAINT crime_charges_crime_id_fk
  6              REFERENCES crimes ( crime_id ),
  7      crime_code    NUMBER(3)
  8          CONSTRAINT crime_charges_crime_code_fk
  9              REFERENCES crime_codes ( crime_code ),
 10      charge_status VARCHAR2(2),
 11      fine_amount   NUMBER(2),
 12      court_fee     NUMBER(7),
 13      amount_paid   NUMBER(7),
 14      pay_due_date  DATE,
 15      --
 16      CONSTRAINT charge_status_check CHECK ( charge_status IN ( 'PD', 'GL', 'NG' ) )
 17  );

Table created.
SQL> CREATE TABLE crime_charges (
  2      charge_id     NUMBER(10)
  3          CONSTRAINT crime_charges_id_pk PRIMARY KEY,
  4      crime_id      NUMBER(9)
  5          CONSTRAINT crime_charges_crime_id_fk
  6              REFERENCES crimes ( crime_id ),
  7      crime_code    NUMBER(3)
  8          CONSTRAINT crime_charges_crime_code_fk
  9              REFERENCES crime_codes ( crime_code ),
 10      charge_status VARCHAR2(2)
 11      CONSTRAINT charge_status_check CHECK ( charge_status IN ( 'PD', 'GL', 'NG' ) ),
 12      fine_amount   NUMBER(2),
 13      court_fee     NUMBER(7),
 14      amount_paid   NUMBER(7),
 15      pay_due_date  DATE
 16  );

Table created.

相关问题