Итак, я начинаю с этим и стараюсь следовать инструкциям моих преподавателей о том, как это сделать. Они заключаются в следующем:Проблема Oracle SQL с вставными выражениями
Рассмотрим реляционную базу данных, описанную в таблицах 1-3. Подчеркнутый атрибут (ы) является первичным ключом для таблицы. Используйте свою учетную запись Oracle для создания этой базы данных и вставки кортежей, перечисленных в каждой таблице. Убедитесь, что вы включили ограничения первичного ключа и внешнего ключа. Поместите контрольные ограничения на следующие три атрибута. Рейтинг (от 0 до 10), Lengith (больше 0), ReleaseDate (после 1/1/1900).
Таблица 1: Театры
Имя (Подчеркнуто как первичный), город, штат, почтовый индекс, телефон
Таблица 2: Фильмы
Название (Primary), рейтинг, длина, ReleaseDate
Таблица 3 : ShownAt
TheatreName, MovieTitle (ОБА в список Primary)
Вот как я их объявил:
CREATE TABLE Theatres (
Name varchar2(50) not null,
City varchar2(50) not null,
State varchar2(50) not null,
Zip number not null,
Phone varchar2(50) not null,
CONSTRAINT name_pk PRIMARY KEY (Name)
);
create table Movies (
Title varchar2(100),
Rating NUMBER CONSTRAINT Rating_CHK CHECK (Rating BETWEEN 0 AND 10),
Length NUMBER CONSTRAINT Length_CHK CHECK (Length > 0),
ReleaseDate date CONSTRAINT RDATE_CHK CHECK (ReleaseDate > to_date('1/January/1900', 'DD/MONTH/YYYY')),
CONSTRAINT title_pk PRIMARY KEY (Title)
);
create table ShownAt (
TheatreName varchar2(50),
MovieTitle varchar2(100),
CONSTRAINT moviet_fk FOREIGN KEY (MovieTitle) REFERENCES Movies(Title),
CONSTRAINT shown_pk PRIMARY KEY (TheatreName, MovieTitle)
);
Это заявляет штраф, и я не получаю ошибок. Ниже приведены мои вставки (я дал один пример вставки для каждой таблицы):
insert into theatres values ('Great Escape 14', 'Wilder', 'KY', '41076', '(859) 442-0000');
insert into movies values ('The Expendables', '7.6', '103', '13 August 2010');
insert into shownat values ('Great Escape 14', 'The Expendables');
Все вставки в театры и кино идут без сучка и задоринки. Для ShownAt, я получаю много ошибок, большинство из которых выглядят примерно так:
Error starting at line 37 in command:
insert into shownat values ('Showcase Cinema De Lux Florence', 'The Pianist')
Error report:
SQL Error: ORA-02291: integrity constraint (LANGB1.MOVIET_FK) violated - parent key not found
Значение:
02291. 00000 - "integrity constraint (%s.%s) violated - parent key not found"
*Cause: A foreign key value has no matching primary key value.
*Action: Delete the foreign key or add a matching primary key.
Любая вставка в ShownAt, где заголовок только одно слово (скажем, фильм Вверх) работает отлично, но ничего с более чем одним словом (например, Expendables) не будет выполняться и дать вышеприведенную ошибку. Любая помощь приветствуется. Я могу разместить любые другие детали, которые вам нужны.
Каковы записи вставки для записей в кинотеатре и в театре, соответствующие приведенной вами ошибке примера? @ Объяснение APC кажется вероятным, но другие данные помогут подтвердить это. (Кроме того, вы должны иметь FK на showat.theatrename тоже?) –