【问题标题】:Column check constraint integrity issue列检查约束完整性问题
【发布时间】:2016-05-12 13:34:42
【问题描述】:
    SQL> CREATE TABLE CUSTOMER(
 2  CNUM VARCHAR(25) NOT NULL,
 3  CNAME VARCHAR(75) NOT NULL,
 4  CTYPE VARCHAR(20) NOT NULL,
 5  PRIMARY KEY(CNUM),
 6  CONSTRAINT CHECK (CTYPE IN('INDIVIDUAL', 'INSTITUTION'));
CONSTRAINT CHECK (CTYPE IN('INDIVIDUAL', 'INSTITUTION'))
                                                   *
ERROR at line 6:
ORA-02438: Column check constraint cannot reference other columns

您好,有人可以帮忙吗?我没有引用任何其他列,但我收到一条错误消息,指出我正在引用其他列。

【问题讨论】:

  • 请为使用的 RDBMS 添加标签
  • Oracle 约束是否需要名称?我会尝试将其更改为:CONSTRAINT chk_ctype CHECK (CTYPE IN ('INDIVIDUAL', 'INSTITUTION'))); 我还必须在此处添加另一个右括号,但随后它在 SQLFiddle 中运行正常。
  • @TomH 谢谢兄弟,这是答案
  • 您是否愿意将其作为答案,以便我可以将其标记为答案
  • @TomH 您可能希望将评论移至答案部分...?

标签: sql database oracle reference multiple-columns


【解决方案1】:

我会尝试将其更改为:

CONSTRAINT chk_ctype CHECK (CTYPE IN ('INDIVIDUAL', 'INSTITUTION')));

我还必须在此处添加另一个右括号,但随后它在 SQLFiddle 中运行正常。

【讨论】:

    【解决方案2】:

    Oracle 中的约束不需要名称。

    相反,您要么使用关键字“CONSTRAINT”,但在这种情况下您必须提供名称,或者您不使用关键字“CONSTRAINT”。最后一行的以下语法完美无缺。 (请注意,进行此更改后,您仍然会收到有关缺少与表定义对应的右括号的错误消息,正如 Tom H 所注意到的。)

    CHECK (CTYPE IN('INDIVIDUAL', 'INSTITUTION'));
    

    也就是说,如果您不想或不需要为约束命名,只需从该行中删除单词“CONSTRAINT”即可。

    http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm#CJAGIICD

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2017-03-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2019-10-20
      相关资源
      最近更新 更多