【问题标题】:Oracle Create TABLEOracle 创建表
【发布时间】:2013-08-27 23:51:59
【问题描述】:

我正在尝试使用 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 - “缺少右括号” *原因:
*行动:

请帮忙!

【问题讨论】:

  • 你的外键好像太少了。

标签: oracle ddl


【解决方案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)
);

【讨论】:

    【解决方案2】:

    您不应该对 int 类型使用限制...oracle 将采用 int 类型的默认长度。 您可以使用 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)
    );
    

    【讨论】:

      【解决方案3】:

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

      1. Here is the documentation you need to fix your issue(如何使用正确的外键语法编写查询)

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

      【讨论】:

      • 他使用的是 Oracle 数据库,而不是 Oracle MySQL。
      • 试过了还是报错!从命令的第 1 行开始出错:CREATE TABLE 供应商(supplier_id numeric(10) not null,supplier_name varchar2(30) not null,supplier_price double(5),supplier_address varchar2(50),supplier_phone varchar(15),CONSTRAINT supply_pk PRIMARY KEY (supplier_id) ) 命令行错误:4 列:23 错误报告:SQL 错误:ORA-00905:缺少关键字 00905。00000 -“缺少关键字” *原因:*操作:
      • @user2714726 将product_price 列的数据类型从DOUBLE(4) 更改为NUMBER(12,4)
      • 谢谢大家!终于搞定了
      • @user2714726 如果这对您有用,请不要忘记将答案标记为正确
      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2011-02-18
      相关资源
      最近更新 更多