2016-04-09 2 views
-2

Я не умею писать сценарии создания. И сообщения об ошибках SQL Developer не помогают мне. Я ищу кого-то, кто поможет мне понять, что не так, потому что я не могу сделать это один.Несколько ошибок при удалении и создании таблиц

Вот мой код:

/*Drops */ 
DROP TABLE Accountsite CASCADE CONSTRAINTS; 
DROP TABLE Player CASCADE CONSTRAINTS; 
DROP TABLE Stream CASCADE CONSTRAINTS; 
DROP TABLE Server CASCADE CONSTRAINTS; 
DROP TABLE Activegame CASCADE CONSTRAINTS; 
DROP TABLE Livegame CASCADE CONSTRAINTS; 
DROP TABLE Toplist CASCADE CONSTRAINTS; 
DROP TABLE Champion CASCADE CONSTRAINTS; 
DROP TABLE Skin CASCADE CONSTRAINTS; 
DROP TABLE Sale CASCADE CONSTRAINTS; 
DROP TABLE PlayerServer CASCADE CONSTRAINTS; 
DROP TABLE ActiveServer CASCADE CONSTRAINTS; 

/*Creates */ 
CREATE TABLE Accountsite(
AccountID NUMBER PRIMARY KEY NOT NULL, 
PasswordAcc VARCHAR(20) NULL, 
Email VARCHAR(20) NULL, 
Playername VARCHAR(20) NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername)); 

CREATE TABLE Player(
PlayerID NUMBER PRIMARY KEY, 
Mostplayed VARCHAR(20) NOT NULL, 
RankID NUMBER(10) NOT NULL, 
Playername VARCHAR(20) NOT NULL); 

CREATE TABLE Stream(
StreamID NUMBER PRIMARY KEY, 
StreamAdress VARCHAR(20) NOT NULL, 
Playername VARCHAR(20) NOT NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername)); 

CREATE TABLE Server(
ServerID NUMBER PRIMARY KEY, 
Servername VARCHAR(20)); 

CREATE TABLE Activegame(
GameID NUMBER PRIMARY KEY); 

CREATE TABLE Livegame(
SpectateID NUMBER PRIMARY KEY); 

CREATE TABLE Toplist(
ToplistID NUMBER PRIMARY KEY, 
ToplistFunction VARCHAR(20) NOT NULL, 
Playername VARCHAR(20) NOT NULL, 
Championname VARCHAR(20) NOT NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername), 
FOREIGN KEY(Champion) REFERENCES Champion (Champion)); 

CREATE TABLE Champion(
ChampionID NUMBER PRIMARY KEY, 
Championname VARCHAR(20) NOT NULL, 
Championskill1 VARCHAR(20) NOT NULL, 
Championskill2 VARCHAR(20) NOT NULL, 
Championskill3 VARCHAR(20) NOT NULL, 
Championskill4 VARCHAR(20) NOT NULL, 
Championcost NUMBER(10) DEFAULT(6300), 
SkinID NUMBER(10) NOT NULL, 
SaleID NUMBER(10) NOT NULL, 
FOREIGN KEY(SkinID) REFERENCES Skin (SkinID), 
FOREIGN KEY(SaleID) REFERENCES Sale (SaleID)); 

CREATE TABLE Skin(
SkinID NUMBER PRIMARY KEY, 
Skinname VARCHAR(20) NOT NULL, 
Skincost NUMBER(10) NOT NULL); 

CREATE TABLE Sale(
SaleID NUMBER PRIMARY KEY); 

CREATE TABLE PlayerServer(
Playername VARCHAR(20) NOT NULL, 
ServerIDPlayer NUMBER NOT NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername), 
FOREIGN KEY(ServerIDPlayer) REFERENCES Server (ServerID), 
Constraint PlayerserverID PRIMARY KEY (Playername, ServerIDPlayer)); 

CREATE TABLE ActiveServer(
GameIDServer NUMBER NOT NULL, 
ServerIDGame NUMBER NOT NULL, 
FOREIGN KEY(GameIDServer) REFERENCES Acrivegame (GameID), 
FOREIGN KEY(ServerIDGame) REFERENCES Server (ServerID), 
Constraint ActiveserverID PRIMARY KEY (GameIDServer, ServerIDGame)); 

commit; 

И ошибки следующим образом:

Error starting at line : 2 in command - 
DROP TABLE Accountsite CASCADE CONSTRAINTS 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Table PLAYER dropped. 

Error starting at line : 4 in command - 
DROP TABLE Stream CASCADE CONSTRAINTS 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Table SERVER dropped. 

Table ACTIVEGAME dropped. 

Table LIVEGAME dropped. 

Error starting at line : 8 in command - 
DROP TABLE Toplist CASCADE CONSTRAINTS 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Error starting at line : 9 in command - 
DROP TABLE Champion CASCADE CONSTRAINTS 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Table SKIN dropped. 

Table SALE dropped. 

Error starting at line : 12 in command - 
DROP TABLE PlayerServer CASCADE CONSTRAINTS 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Error starting at line : 13 in command - 
DROP TABLE ActiveServer CASCADE CONSTRAINTS 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Error starting at line : 16 in command - 
CREATE TABLE Accountsite(
AccountID NUMBER PRIMARY KEY NOT NULL, 
PasswordAcc VARCHAR(20) NULL, 
Email VARCHAR(20) NULL, 
Playername VARCHAR(20) NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername)) 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Table PLAYER created. 

Error starting at line : 29 in command - 
CREATE TABLE Stream(
StreamID NUMBER PRIMARY KEY, 
StreamAdress VARCHAR(20) NOT NULL, 
Playername VARCHAR(20) NOT NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername)) 
Error report - 
SQL Error: ORA-02270: Geen overeenkomende unieke of primaire sleutel voor deze kolomlijst. 
02270. 00000 - "no matching unique or primary key for this column-list" 
*Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement 
      gives a column-list for which there is no matching unique or primary 
      key constraint in the referenced table. 
*Action: Find the correct column names using the ALL_CONS_COLUMNS 
      catalog view 

Table SERVER created. 

Table ACTIVEGAME created. 

Table LIVEGAME created. 

Error starting at line : 45 in command - 
CREATE TABLE Toplist(
ToplistID NUMBER PRIMARY KEY, 
ToplistFunction VARCHAR(20) NOT NULL, 
Playername VARCHAR(20) NOT NULL, 
Championname VARCHAR(20) NOT NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername), 
FOREIGN KEY(Champion) REFERENCES Champion (Champion)) 
Error report - 
SQL Error: ORA-00904: "CHAMPION": ongeldige ID 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 

Error starting at line : 53 in command - 
CREATE TABLE Champion(
ChampionID NUMBER PRIMARY KEY, 
Championname VARCHAR(20) NOT NULL, 
Championskill1 VARCHAR(20) NOT NULL, 
Championskill2 VARCHAR(20) NOT NULL, 
Championskill3 VARCHAR(20) NOT NULL, 
Championskill4 VARCHAR(20) NOT NULL, 
Championcost NUMBER(10) DEFAULT(6300), 
SkinID NUMBER(10) NOT NULL, 
SaleID NUMBER(10) NOT NULL, 
FOREIGN KEY(SkinID) REFERENCES Skin (SkinID), 
FOREIGN KEY(SaleID) REFERENCES Sale (SaleID)) 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Table SKIN created. 

Table SALE created. 

Error starting at line : 74 in command - 
CREATE TABLE PlayerServer(
Playername VARCHAR(20) NOT NULL, 
ServerIDPlayer NUMBER NOT NULL, 
FOREIGN KEY(Playername) REFERENCES Player (Playername), 
FOREIGN KEY(ServerIDPlayer) REFERENCES Server (ServerID), 
Constraint PlayerserverID PRIMARY KEY (Playername, ServerIDPlayer)) 
Error report - 
SQL Error: ORA-02270: Geen overeenkomende unieke of primaire sleutel voor deze kolomlijst. 
02270. 00000 - "no matching unique or primary key for this column-list" 
*Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement 
      gives a column-list for which there is no matching unique or primary 
      key constraint in the referenced table. 
*Action: Find the correct column names using the ALL_CONS_COLUMNS 
      catalog view 

Error starting at line : 81 in command - 
CREATE TABLE ActiveServer(
GameIDServer NUMBER NOT NULL, 
ServerIDGame NUMBER NOT NULL, 
FOREIGN KEY(GameIDServer) REFERENCES Acrivegame (GameID), 
FOREIGN KEY(ServerIDGame) REFERENCES Server (ServerID), 
Constraint ActiveserverID PRIMARY KEY (GameIDServer, ServerIDGame)) 
Error report - 
SQL Error: ORA-00942: Tabel of view bestaat niet. 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 

Commit complete. 

Что я делаю неправильно?

+4

Этот вопрос содержит слишком много ошибок для обработки сразу. Я предлагаю попытаться понять каждое заявление отдельно, выполняя их один за другим и пытаясь разобраться с каждой ошибкой самостоятельно. Например, первые ошибки в вашем скрипте имеют тип «таблица или вид не существует», поэтому вы можете понять, что причина для них заключается в попытке удалить таблицу, которая не существует. После того как вы проверили все успешные заявления и попытались решить некоторые ошибки самостоятельно, вы должны отправить вопрос для отдельного заявления, и это ошибка. –

+0

В этом случае игнорируйте ошибки из операторов сброса, они ожидаются, так как создаются неудачи. Некоторые из ошибок в творениях связаны с тем, что предыдущие не удались, поэтому начните с первой ошибки, отличной от капли, и сравните ее. Что такое ORA-02270, создающий Stream; что довольно понятно. (Подсказка: эта таблица не должна содержать имя игрока *). –

+0

Er, ОК, это не первый, трудно увидеть в неформатированном дампе всех ошибок. Посмотрите на порядок создания таблиц и на другие таблицы, на которые они ссылаются. Когда вы создаете учетную запись, существует ли еще Player? У этой проблемы также сохраняется имя игрока. –

ответ

0

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

Ошибки при попытке удалить таблицу

Вы в основном получаете ORA-00942, потому что ваша таблица не существует, поэтому он не может быть удален. В качестве обходного пути вы можете поймать это исключение. Описано in this answer.

Ошибки при попытке создать таблицу

У вас есть несколько вопросов в этой теме. Первый - когда вы выполняете инструкцию create таблицы Accountsite. Вы также получаете здесь ORA-00942, потому что таблица Player, которую вы пытаетесь ссылаться на ограничение внешнего ключа, не существует. Вам необходимо создать его до Accountsite, чтобы он мог ссылаться на нечто существующее.

Следующая ошибка возникает при создании таблицы Stream. Это ORA-02270. Вы не можете ссылаться на столбец из другой таблицы, которая не является уникальной. Вы должны сделать столбец Playername уникальным в таблице Player. Обратите внимание, что когда вы исправляете первую ошибку с помощью таблицы Accountsite, у вас будет такая же ошибка для этой таблицы, как и для Stream, так как вы пытаетесь ссылаться на столбец, который не является уникальным в обоих операторах create table (так что вам также нужно исправить вторая ошибка, и это пойдет без ошибок).

Сейчас Toplist стол. В таблице Champion нет колонки Champion. Вероятно, вы имеете в виду Championname. В этом случае также необходимо создать таблицу Champion перед таблицей Toplist, так как вы не можете создать ограничение внешнего ключа для несуществующей таблицы. Вам также необходимо объявить свой столбец Championname в таблице Champion уникальной (так же, как и с Playername в таблице Player).

В Champion ссылка на таблице Sale и Skin - оба они должны быть созданы до Champion таблицы (см объяснения выше).

Что касается PlayerServer, то ошибка будет решена сама собой при создании уникального ограничения на Player(Playername).

В ActiveServer у вас есть опечатка в ссылке "Acrivegame", которая, я считаю, должна быть Activegame.

+0

Разумеется, поток и т. Д. Должен хранить идентификатор игрока, а не имя? В любом случае имя может не быть уникальным, но даже если это так, дублирование имени нарушает нормализацию. Идентификатор удобен для использования в качестве FK уже. То же самое с именем чемпиона. –

+0

Вы даете мне намеки на _not my_ design? Я просто помогаю с ошибками. –

Смежные вопросы