【问题标题】:Oracle Unknown Command - CONSTRAINTOracle 未知命令 - 约束
【发布时间】:2014-11-25 03:53:50
【问题描述】:

我决定把 SQL 文件完全放在这里。

CREATE TABLE Account
(
    AccountNumber INTEGER NOT NULL PRIMARY KEY,
    Name varchar(30) NOT NULL
);

CREATE SEQUENCE SEQ_ADDR START WITH 1 INCREMENT BY 1;

CREATE TABLE Address
(
    AddressNumber INTEGER NOT NULL PRIMARY KEY,
    AccountNumber INTEGER NOT NULL,
    IsPrimary INTEGER NOT NULL,
    StreetName varchar(50) NOT NULL,
    ZipCode INTEGER NOT NULL
);

CREATE TABLE Bill
(
    AccountNumber INTEGER NOT NULL,
    EndDate DATE NOT NULL,
    StartDate DATE NOT NULL,
    DueDate DATE NOT NULL,

    CONSTRAINT BillFK FOREIGN KEY (AccountNumber) REFERENCES Account(AccountNumber),
    CONSTRAINT BillPK PRIMARY KEY (AccountNumber, EndDate)
);

再次,我得到的错误始于第一个约束调用(以“CONSTRAINT ...”开头的未知命令 - 忽略了行的其余部分。)。我也偶尔会收到一个“未知命令”)——其余行被忽略。有什么想法吗?

【问题讨论】:

  • int 在 Oracle 中不是有效的数据类型。尝试将其更改为数字或整数
  • 我创建了一个测试表create table account(accountnumber int primary key);,您的表在我的环境(11.2.0.3)中创建得很好。您确定这不是复制/粘贴错误吗?你是在 sqlplus 中输入这个吗?
  • 我正在将上面的文件加载到 SQLPlus 中,是的。我决定添加整个文件,因为我的问题似乎不是孤立的。

标签: oracle


【解决方案1】:

任何空行都会阻止SQL*Plus 接受输入块并将其放入缓冲区。
因此,当您在空行之后启动 CONSTRAINT 关键字时,它会将其视为新命令,并引发错误。

在运行所有 DDLs 之前试试这个。

set sqlblanklines on

您需要指示 sql*plus 忽略空行

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2022-01-18
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多