Ошибка SQL в создании таблицы: отсутствует скобка - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь создать 3 связанные таблицы

/*create customer_dml ---this works fine*/

DROP TABLE Customer_DML;
CREATE TABLE Customer_DML
(
 customerId CHAR(10) CONSTRAINT customer_pk PRIMARY KEY, 
 ssn CHAR(9) CONSTRAINT customer_uq_ssn UNIQUE,
 firstName VARCHAR2(25) CONSTRAINT customer_nn_fname NOT NULL,
 lastName VARCHAR2(25) CONSTRAINT customer_nn_lname NOT NULL,
 phoneNumber CHAR(10),
 address VARCHAR (100)
);

/*create account_dml- this gets missing right parenthesis error*/

DROP TABLE Account_DML;

CREATE TABLE Account_DML
(
  AccountNumber CHAR(10) CONSTRAINT account_pk PRIMARY KEY,
  CustomerId CHAR(10) 
  CONSTRAINT account_nn_customerId NOT NULL,
  CONSTRAINT account_fk_customerid REFERENCES Customer_DML(customerId)
  ON DELETE CASCADE,
  Type CHAR(1) CONSTRAINT account_ck_type CHECK (Type IN ('C','S')),
  balance NUMBER(8,2) CONSTRAINT account_nn_balance NOT NULL,
  AcctOpenDate DATE CONSTRAINT account_nn_acctopendate NOT NULL,
);

/*create CreditCard_dml --this gets right parenthesis error*/

 CREATE TABLE CreditCard 
(
  cardNumber CHAR (16) CONSTRAINT creditCard_pk PRIMARY KEY,
  customerId CHAR (10) CONSTRAINT creditCard_fk_customerId 
    REFERENCES Customer_DML (customerId)
    ON DELETE CASCADE, 
  limit NUMBER(8,2) creditCard_nn_limit NOT NULL, 
  expirationDate DATE CONSTRAINT creditCard_nn_expirationDate NOT NULL
);

Что я делаю не так, чтобы вызвать следующее сообщение об ошибке?

Сообщение об ошибке - ORA-00907: отсутствует правая скобка
00907. 00000 - «отсутствует правая скобка»
* Причина:
* Действие:

Есть ли способ получить более конкретный код ошибки, чтобы я мог попытаться выяснить, где я ошибся?

1 Ответ

0 голосов
/ 13 марта 2019

Лучший способ отладки DDL - удалять по одной строке за раз до тех пор, пока она не заработает, а затем начать добавлять эти строки обратно, по одной за раз, пока вы не сможете выделить точную строку или строки, которые являются проблематичными.

В вашем DDL есть несколько проблем с синтаксисом, все они связаны с синтаксисом constraint.

Когда вы объявляете ограничение, вы даете ему имя, а затем столбцу (столбцам), к которому относится ограничение,Вы пропустили эту вторую часть.

CONSTRAINT account_nn_customerId NOT NULL должно быть CONSTRAINT account_nn_customerId CustomerID NOT NULL

CONSTRAINT account_fk_customerid REFERENCES Customer_DML(customerId) ON DELETE CASCADE, должно быть CONSTRAINT account_fk_customerid foreign key (CustomerId) REFERENCES Customer_DML(customerId) ON DELETE CASCADE,

Эти два примера исправления должны помочь вам исправитьдругие синтаксические ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...