2016-04-23 8 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 Webサイトで実行しています。私は私が持っているコードは古い構文を持っていると信じています。どのようにIDENTITYキーワードを考慮する必要がありますか? –

答えて

2

次のddlは構文的に正しいです。次のように

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キーワードが計上されていない)何をしたい生産するかどうかを確認する必要が

  • IDENTITYキーワード
  • インライン制約仕様
  • データ型は文字列cの日時
  • データ型を表すためにontent
  • スタンドインmoneyデータ型
  • 現在の日時の
+0

AMOUNTの宣言では、小数点の左に6桁しか許されないため、10の精度は金銭的価値に対してかなり低いようです。可能な最大精度38のための塗りつぶしとして機能する '*'を指定することで、精度を落とすことができます。したがって、定義は 'Amount NUMBER(*、4)'になります。 –

+0

@BobJarvisあなたはここにポイントを持っています - 私は推奨された次元がローン申請に合っているという点で、著者が信頼している参照されたSOの回答から推薦を受けました。私はあなたのヒントに従って解決策を調整しました。 – collapsar