2016-04-23 2 views
0

J'ai essayé de modifier la commande et à la recherche d'autres questions afin de répondre à cette question, mais je reçois toujours leSQL: manquant Parenthèses

redoutée

ORA-00907: manque parenthèse.

Voici mon code. Y a-t-il un mot clé que je pourrais avoir besoin de laisser tomber ici? Merci

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

Plusieurs parties de ce ne sont pas valides syntaxe Oracle. L'avez-vous copié à partir d'un autre SGBD? Et quelle version d'Oracle essayez-vous de l'utiliser? –

+0

Je l'utilise sur le site Web actuel d'Oracle Application Express. Je crois que le code que j'ai ont une syntaxe obsolète. Comment devrais-je comptabiliser le mot clé IDENTITY? –

Répondre

2

Le ddl suivant est syntaxiquement correct. Bien sûr, vous devez vérifier si cette déclaration produit vraiment ce que vous voulez (en particulier le mot-clé IDENTITY dans votre déclaration d'origine est pas prise en compte):

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

Les écarts de syntaxe sont les suivantes:

  • IDENTITY mot-clé
  • spécification de contraintes en ligne
  • type de données pour représenter date et l'heure
  • pour chaîne c datatype ontenu
  • stand-in pour l'argent
  • type de données datetime actuelle
+0

Dans la déclaration de AMOUNT, une précision de 10 semble plutôt faible pour une valeur monétaire car elle ne permet que six chiffres à gauche de la virgule décimale. La précision peut être laissée en spécifiant '*' qui sert de fill-in pour la précision maximale possible de 38, et donc la définition serait 'Amount NUMBER (*, 4)'. –

+0

@BobJarvis Vous avez un point ici - J'ai pris la recommandation de la réponse SO référencée confiant à l'auteur en ce que la dimension suggérée convient aux demandes de prêt. J'ai ajusté la solution en fonction de votre indice. – collapsar