1

我正在尝试使用 oracle 创建一个带有外键的表。我的语法如下

CREATE TABLE product (
   product_id       INT(7) NOT NULL,
   supplier_id      INT(7) NOT NULL,
   product_name     VARCHAR2(30),
   product_price    DOUBLE(4),
   product_category VARCHAR2(30),
   product_brand    VARCHAR2(20),
   product_expire   DATE,
   PRIMARY KEY (product_id),
   FOREIGN KEY (supplier_id)
)

我有一个错误,说

命令行错误:2 列:14 错误报告:SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号” *原因:
*操作:

请帮忙!

4

3 回答 3

3

您的外键应该引用另一个表上的另一个列。

  1. 这是解决问题所需的文档(如何使用正确的外键语法编写查询)

  2. 此外,将列 product_price 的数据类型从 更改DOULBE(4)NUMBER(12,4)

于 2013-08-25T10:37:58.167 回答
1

您不应该对 int type 使用 limit ...oracle 将采用 int type 的默认长度。您可以使用 Number 类型代替 int 来使其运行。DOUBLE PRECISION 是 oracle 中的一种数据类型,但 Double 不存在。此外,外键的语法是错误的。所以这个查询肯定会起作用:

CREATE TABLE product(
   product_id       number(7) NOT NULL,
   supplier_id      number(7) NOT NULL,
   product_name     VARCHAR2(30),
   product_price    DOUBLE PRECISION,
   product_category VARCHAR2(30),
   product_brand    VARCHAR2(20),
   product_expire   DATE,
   PRIMARY KEY (product_id),
   FOREIGN KEY (supplier_id)
    REFERENCES parent_table (supplier_id)
);
于 2014-05-09T07:11:08.857 回答
1

您创建类似外键引用的父表,这是创建外键的正确语法

CREATE TABLE product(
   product_id       number(7) NOT NULL,
   supplier_id      number(7) NOT NULL,
   product_name     VARCHAR(30),
   product_price    DOUBLE PRECISION,
   product_category VARCHAR(30),
   product_brand    VARCHAR(20),
   product_expire   DATE,
   PRIMARY KEY (product_id),
   FOREIGN KEY (supplier_id)
    REFERENCES parent_table (supplier_id)
);
于 2020-08-12T16:47:26.250 回答