ошибка из-за отсутствия левой круглой скобки? - PullRequest
0 голосов
/ 20 января 2020
CREATE TABLE Transaction
(Portfolio_Number NUMBER(7,0) CONSTRAINT NN_Portfolio_Number NOT NULL,
                            CONSTRAINT FK_Portfolio_Number FOREIGN KEY
                            (Portfolio_Number) REFERENCES Portfolio(Portfolio_Number),
                            CONSTRAINT PK_Portfolio_Number PRIMARY KEY,
Stock_Code VARCHAR2(50) CONSTRAINT NN_Stock_Code NOT NULL,
                            CONSTRAINT FK_Stock_Code FOREIGN KEY
                            (Stock_Code) REFERENCES Stock(Stock_Code),
                            CONSTRAINT PK_Stock_Code PRIMARY KEY,
Transaction_Date DATE DEFAULT SYSDATE
                    CONSTRAINT PK_Transaction_Date PRIMARY KEY
                    CONSTRAINT NN_Transaction_Date NOT NULL,
Exchange_Code VARCHAR2(4) CONSTRAINT NN_Exchange_Code NOT NULL,
                        CONSTRAINT FK_Exchange_Code FOREIGN KEY
                        (Exchange_Code) REFERENCES Exchange(Exchange_Code),
Broker_Number NUMBER(7,0) CONSTRAINT NN_Broker_Number NOT NULL,
                        CONSTRAINT FK_Broker_Number FOREIGN KEY
                        (Broker_Number) REFERENCES Broker(Broker_Number),
Buy_Sell CHAR(1) CONSTRAINT NN_Buy_Sell NOT NULL,
Quantity NUMBER(7,0) CONSTRAINT CK_Quantity CHECK (Quantity > 0)
                    CONSTRAINT NN_Quantity NOT NULL,
Price_Per_Share NUMBER(6,2) CONSTRAINT NN_Price_Per_Share NOT NULL);

Ответы [ 2 ]

1 голос
/ 20 января 2020

Кажется, вы потеряли слишком много CONSTRAINT s, разбросанных по всему куску кода.

  • таблица может иметь только одно ограничение первичного ключа; у вас есть 3 из них. Если это составной первичный ключ, все столбцы должны быть помещены в одно и то же предложение CONSTRAINT (см. Мой пример)
  • , вы не можете смешивать ограничения со столбцами; если вы используете их, поместите все эти контурные ограничения в конец скрипта (как я сделал)

Я не могу запустить его, так как скучаю по всем таблицам, на которые вы ссылаетесь, но этот код правильно отформатирован, поэтому я надеюсь, что он должен скомпилироваться.

CREATE TABLE Transaction
(
   Portfolio_Number  NUMBER (7, 0) CONSTRAINT NN_Portfolio_Number NOT NULL,
   Stock_Code        NUMBER (7, 0) CONSTRAINT NN_Stock_Code NOT NULL,
   Transaction_Date  DATE
                        DEFAULT SYSDATE
                        CONSTRAINT NN_Transaction_Date NOT NULL,
   Exchange_Code     VARCHAR2 (4) CONSTRAINT NN_Exchange_Code NOT NULL,
   Broker_Number     NUMBER (7, 0) CONSTRAINT NN_Broker_Number NOT NULL,
   Buy_Sell          CHAR (1) CONSTRAINT NN_Buy_Sell NOT NULL,
   Quantity          NUMBER (7, 0)
                        CONSTRAINT CK_Quantity CHECK (Quantity > 0)
                        CONSTRAINT NN_Quantity NOT NULL,
   Price_Per_Share   NUMBER (6, 2) CONSTRAINT NN_Price_Per_Share NOT NULL,
   --
   CONSTRAINT PK_Transaction_Date PRIMARY KEY
      (portfolio_number, transaction_date, stock_code),
   CONSTRAINT FK_Portfolio_Number FOREIGN KEY
      (Portfolio_Number)
       REFERENCES Portfolio (Portfolio_Number),
   CONSTRAINT FK_Stock_Code FOREIGN KEY
      (Stock_Code)
       REFERENCES Stock (Stock_Code),
   CONSTRAINT FK_Exchange_Code FOREIGN KEY
      (Exchange_Code)
       REFERENCES Exchange (Exchange_Code),
   CONSTRAINT FK_Broker_Number FOREIGN KEY
      (Broker_Number)
       REFERENCES Broker (Broker_Number)
);
1 голос
/ 20 января 2020

Вы пытаетесь создать первичный ключ без указания имени столбца

, CONSTRAINT PK_Portfolio_Number PRIMARY KEY,

, что неверно. Право будет примерно таким:

, CONSTRAINT PK_Portfolio_Number PRIMARY KEY(Portfolio_Number), 

Следующее, что нужно отметить, это то, что вы пытаетесь создать 2 первичных ключа для одной таблицы, что невозможно. Если вам нужен первичный ключ для обоих столбцов, вам нужно указать их в одном выражении

, CONSTRAINT PK_Portfolio_Number PRIMARY KEY(Portfolio_Number, Stock_Code), 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...