2016-04-23 108 views
0

我试图编辑命令,看着为了回答这个问题,其他的问题,但我仍然得到了可怕的SQL:缺少括号

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) 
); 
+0

是有几个地方都没有有效的Oracle语法。你是否从另一个DBMS中复制它?你试图运行哪个版本的Oracle? –

+0

我在当前的Oracle Application Express网站上运行它。我相信我的代码有过时的语法。我将如何解释IDENTITY关键字。 –

回答

2

以下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 
); 

语法偏差如下:

  • IDENTITY关键字
  • 直列约束规范
  • 数据类型来表示串c日期和时间
  • 数据类型ontent
  • 替身货币数据类型
  • 当前日期时间
+0

在AMOUNT的声明中,对于货币值,精度为10似乎相当低,因为这只允许小数点左边的六位数字。通过指定作为最大可能精度为38的填充的'*',可以省去精度,因此定义将为'Amount NUMBER(*,4)'。 –

+0

@BobJarvis您在这里有一点 - 我从所引用的SO回答中推荐信任作者,因为建议的维度适合贷款申请。我根据你的提示调整了解决方案。 – collapsar