【问题标题】:ORA-00907L missing right parenthesis [closed]ORA-00907L 缺少右括号 [关闭]
【发布时间】:2022-01-10 05:35:31
【问题描述】:

我已尝试使用此代码创建一个新的脚本表

CREATE TABLE orderheader(
Order_id NUMBER CONSTRAINT or_id NOT NULL CHECK(Order_id > 0),
Order_date DATE,
Order_customer VARCHAR2(10) REFERENCE customer(Cust_id),
Order_delivery NUMBER CONSTRAINT or_deli NOT NULL CHECK (Order_delivery > 0),
Order_total NUMBER CONSTRAINT or_to CHECK (Order_total > 0),
Order_vat NUMBER,
Order_payment NUMBER,
Order_completed DATE,
Order_credit CHAR(1) CONSTRAINT or_cre_ck CHECK (Order_credit IN ('Y', 'N')),
Order_takenby NUMBER CONSTRAINT or_tak CHECK(Order_takenby > 0) REFERENCE employee,
CONSTRAINT orhe_id_cus_deli PRIMARY KEY (Order_customer, Order_delivery, Order_id)
)

当我尝试执行此代码时,弹出此错误

Error computing plan for statement.
ORA-00907: missing right parenthesis

我到处寻找,并尝试一一消除约束。在我删除所有约束之前,所有结果都相同。可能还有其他我不知道的错误。这可能看起来很简单,因为我刚刚开始使用这种 SQL 编码。我有员工,并创建了客户。

【问题讨论】:

  • This 应该会有所帮助。
  • 关于数据模型的注释。我希望一个名为 ORDER_HEADER 的表具有 ORDER_ID 的主键。也就是说,每个 ORDER_ID 都是唯一的。 CUSTOMER_ID/ORDER_NO 的复合主键是不寻常的:它可能代表业务(候选)键,但在多用户、大容量环境中实施时会导致复杂性。 CUSTOMER_ID/ORDER_NO/DELIVERY_NO 只是看起来不对。即使可以将一个订单拆分为多个交付,也应该在订单行级别进行跟踪吗?

标签: sql oracle


【解决方案1】:

REFERENCE 应该是REFERENCES

CREATE TABLE orderheader(
Order_id NUMBER CONSTRAINT or_id NOT NULL CHECK(Order_id > 0),
Order_date DATE,
Order_customer VARCHAR2(10) REFERENCES customer(Cust_id),
Order_delivery NUMBER CONSTRAINT or_deli NOT NULL CHECK (Order_delivery > 0),
Order_total NUMBER CONSTRAINT or_to CHECK (Order_total > 0),
Order_vat NUMBER,
Order_payment NUMBER,
Order_completed DATE,
Order_credit CHAR(1) CONSTRAINT or_cre_ck CHECK (Order_credit IN ('Y', 'N')),
Order_takenby NUMBER CONSTRAINT or_tak CHECK(Order_takenby > 0) REFERENCES employee,
CONSTRAINT orhe_id_cus_deli PRIMARY KEY (Order_customer, Order_delivery, Order_id)
)

但是,如果您要命名约束,那么您可能应该将它们全部命名:

CREATE TABLE orderheader(
  Order_id        NUMBER
                  CONSTRAINT or_id_nn NOT NULL
                  CONSTRAINT or_id_ck CHECK(Order_id > 0),
  Order_date      DATE,
  Order_customer  VARCHAR2(10)
                  CONSTRAINT or_cust_fk REFERENCES customer(Cust_id),
  Order_delivery  NUMBER
                  CONSTRAINT or_deli_nn NOT NULL
                  CONSTRAINT or_deli_ck CHECK (Order_delivery > 0),
  Order_total     NUMBER
                  CONSTRAINT or_to_ck CHECK (Order_total > 0),
  Order_vat       NUMBER,
  Order_payment   NUMBER,
  Order_completed DATE,
  Order_credit    CHAR(1)
                  CONSTRAINT or_cre_ck CHECK (Order_credit IN ('Y', 'N')),
  Order_takenby   NUMBER
                  CONSTRAINT or_tak_ck CHECK(Order_takenby > 0)
                  CONSTRAINT or_tak_fk REFERENCES employee,
  CONSTRAINT orhe_id_cus_deli PRIMARY KEY (Order_customer, Order_delivery, Order_id)
)

db小提琴here

【讨论】:

  • 是的,这行得通。感谢您的帮助。
猜你喜欢
  • 2015-03-31
  • 2018-05-23
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多