Я получаю эту ошибку при выполнении таблицы три "Указанное имя ограничения должно быть уникальным. * Действие: Укажите уникальное имя ограничения для ограничения - PullRequest
0 голосов
/ 02 сентября 2018

Таблица первая:

CREATE TABLE Customer 
(CustNo VARCHAR2(8) CONSTRAINT CustNoNotNull NOT NULL, 
 CustName VARCHAR2(30) CONSTRAINT CustNameNotNull NOT NULL, 
 Address VARCHAR2(50) CONSTRAINT AddressNotNull NOT NULL, 
 Internal CHAR(1) CONSTRAINT InternalNotNull NOT NULL, 
 Contact VARCHAR2(35) CONSTRAINT ContractNotNull NOT NULL, 
 Phone VARCHAR2(11) CONSTRAINT CPhoneNotNull NOT NULL, 
 City VARCHAR2(30) CONSTRAINT CityNotNull NOT NULL,
 State VARCHAR2(2) CONSTRAINT StateNotNull NOT NULL, 
 Zip VARCHAR2(10) CONSTRAINT zipNotNull NOT NULL,
  CONSTRAINT PK_CUSTOMER PRIMARY KEY (CustNo) ) ;

Таблица вторая:

CREATE TABLE Facility
(FacNo VARCHAR2(8) CONSTRAINT FacNoNotNull NOT NULL, 
 FacName VARCHAR2(30) CONSTRAINT FacNameNotNull NOT NULL,
   CONSTRAINT PK_FACILITY PRIMARY KEY (FacNo) 
   CONSTRAINT Unique_FacName UNIQUE(FacName) );

Таблица третья:

CREATE TABLE EVENTREQUEST
( EVENTNO VARCHAR2(8) CONSTRAINT EVENTNONOTNULL NOT NULL, 
  DATEHELD DATE CONSTRAINT DATEHELDNOTNULL NOT NULL,
  DATEREQ DATE CONSTRAINT DATEREQNOTNULL NOT NULL,
  CUSTNO VARCHAR2(8) CONSTRAINT CUSTNONOTNULL NOT NULL ,
  FACNO VARCHAR2(8) CONSTRAINT FACNONOTNULL NOT NULL,
  DATEAUTH DATE CONSTRAINT DATEAUTHNULL NULL,
  STATUS VARCHAR2(10) CONSTRAINT STATUSNOTNULL NOT NULL,
  ESTCOST VARCHAR2(25) CONSTRAINT ESTCOSTNOTNULL NOT NULL,
  ESTAUDIENCE VARCHAR2(10) CONSTRAINT ESTAUDIENCENOTNULL NOT NULL,
  BUDNO VARCHAR2(8) CONSTRAINT BUDNONULL  NULL,
        CONSTRAINT PK_EVENTREQUEST PRIMARY KEY (EVENTNO),
        CONSTRAINT FK_CUSTNO FOREIGN KEY (CUSTNO) REFERENCES CUSTOMER (CUSTNO),
        CONSTRAINT FK_FACNO FOREIGN KEY (FACNO) REFERENCES FACILITY (FACNO),
        CONSTRAINT CHECK_EVENTREQUEST_STATUS CHECK(STATUS IN('PENDING','DENIED','APPROVED')));

Я получаю эту ошибку при выполнении таблицы три:

"Указанное имя ограничения должно быть уникальным. * Действие: Указать уникальное имя ограничения для ограничения

Как я могу предотвратить возникновение этой ошибки?

1 Ответ

0 голосов
/ 02 сентября 2018

В Oracle ограничения являются типом объекта, и они имеют идентификатор (имя, по которому они отличаются от других объектов). Все ограничения для всех таблиц в схеме имеют одно и то же пространство имен. Это означает, что вы не можете иметь два ограничения с одним и тем же именем в одной и той же схеме, даже если они находятся в разных таблицах.

Кроме того, идентификаторы по умолчанию не чувствительны к регистру. Во второй таблице вы определили ограничение FacNoNotNull, а в третьей таблице вы пытаетесь определить ограничение FACNONOTNULL. Поскольку идентификаторы нечувствительны к регистру, это то же имя, поэтому вы получаете исключение.

Совершенно неправильный подход (который, к сожалению, сработал бы - очень многие люди склонны делать это, даже если это неправильно) - заключать имена в двойные кавычки, что делает их чувствительными к регистру. Не делай этого!

Скорее, нужно спросить - зачем вам в первую очередь называть свои ограничения NOT NULL? Просто добавьте ключевые слова NOT NULL после определения столбца; очень трудно понять, когда и где вам нужно знать имя каждого такого ограничения.

...