【问题标题】:SQL: Missing ParenthesisSQL:缺少括号
【发布时间】:2016-08-16 23:14:27
【问题描述】:

我已经尝试编辑命令并查看其他问题以回答这个问题,但我仍然感到害怕

ORA-00907:缺少右括号。

这是我的代码。有什么关键词我可能需要放在这里吗?谢谢

CREATE TABLE Loan
(
    LoanID       INT IDENTITY ( 1, 1 ) UNIQUE,
    BranchID     INT NOT NULL REFERENCES Branch(BranchID) ON DELETE CASCADE,
    LoanNumber   CHAR(20) NOT NULL UNIQUE,
    LoanType     VARCHAR(30) NOT NULL,
    Amount       MONEY NOT NULL,
    ModifiedDate DATETIME DEFAULT (getdate()),

    PRIMARY KEY ( LoanID )
);

【问题讨论】:

  • 其中有几个部分不是有效的 Oracle 语法。您是否从另一个 DBMS 复制了它?您要针对哪个版本的 Oracle 运行它?
  • 我在当前的 Oracle Application Express 网站上运行它。我相信我的代码已经过时了语法。我将如何考虑 IDENTITY 关键字。

标签: sql database oracle parentheses banking


【解决方案1】:

以下 ddl 在语法上是正确的。当然,您必须检查该语句是否真的产生了您想要的(特别是原始语句中的IDENTITY 关键字未考虑在内):

CREATE TABLE Loan
(
      LoanID       INTEGER NOT NULL PRIMARY KEY
    , BranchID     INTEGER NOT NULL               CONSTRAINT tl_fk_branchid  REFERENCES Branch(BranchID) ON DELETE CASCADE
    , LoanNumber   CHAR(20) NOT NULL              CONSTRAINT tl_u_loannumber UNIQUE 
                       -- right padded to length of 20 with blanks 
    , LoanType     VARCHAR2(30) NOT NULL
    , Amount       Number(*,4) NOT NULL     
                       -- cf. http://stackoverflow.com/a/29014422, changed per @BobJarvis' comment
    , ModifiedDate DATE DEFAULT SYSDATE
);

语法偏差如下:

  • IDENTITYkeyword
  • 内联约束规范
  • 表示日期和时间的数据类型
  • 字符串内容的数据类型
  • 货币数据类型的替代品
  • 当前日期时间

【讨论】:

  • 在 AMOUNT 的声明中,对于货币值来说,10 的精度似乎相当低,因为这只允许小数点左侧有六位数字。可以通过指定 * 来保留精度,它用作最大可能精度 38 的填充,因此定义为 Amount NUMBER(*,4)
  • @BobJarvis 你有一个观点 - 我从引用的 SO 答案中接受了建议,相信作者,因为建议的维度适合贷款申请。我已经根据您的提示调整了解决方案。
猜你喜欢
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2018-10-23
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
相关资源
最近更新 更多