2016-04-09 3 views
-2

Ich bin nicht gut beim Schreiben von Skripts schreiben. Und die SQL Developer Fehlermeldungen helfen mir nicht. Ich suche jemanden, der mir hilft, herauszufinden, was falsch ist, weil ich das nicht alleine machen kann.Mehrere Fehler beim Löschen und Erstellen von Tabellen

Hier ist mein Code:

/*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; 

Und die Fehler sind wie folgt:

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. 

Was mache ich falsch?

+4

Diese Frage enthält zu viele Fehler, die gleichzeitig behandelt werden müssen. Ich schlage vor, zu versuchen, jede Aussage einzeln zu verstehen, indem ich sie nacheinander ausführe und versuche, mit jedem Fehler allein fertig zu werden. Zum Beispiel - die ersten Fehler in Ihrem Skript sind vom Typ "Tabelle oder Ansicht existiert nicht", Sie können also verstehen, dass der Grund dafür ist, eine Tabelle zu löschen, die nicht existiert. Nachdem Sie alle erfolgreichen Anweisungen aussortiert und versucht haben, einige der Fehler selbst zu beheben, sollten Sie eine Frage für eine einzelne Anweisung und ihren Fehler posten. –

+0

In diesem Fall ignorieren Sie die Fehler in den Drop-Statements. Sie werden erwartet, da die Kreationen fehlschlagen. Einige der Fehler in den Kreationen sind, weil frühere fehlgeschlagen sind, also starte mit dem ersten Nicht-Fallen Fehler und finde das heraus. Welches ist der ORA-02270, der Stream erstellt? Das ist ziemlich selbsterklärend. (Hinweis: In dieser Tabelle sollte der Spieler * Name * nicht gespeichert sein). –

+0

Äh, OK, das ist nicht die erste, es ist schwer zu sehen in der unformatierten Dump aller Fehler. Sehen Sie sich die Reihenfolge an, in der Sie die Tabellen erstellen, und auf welche anderen Tabellen sie sich beziehen. Wenn Sie eine Google-Website erstellen, existiert der Player bereits? Das hat das gleiche Problem, den Spielernamen auch zu speichern. –

Antwort

0

Es gibt einige Probleme mit Ihrem Skript. Wenn Sie Fremdschlüsseleinschränkungen einschließen, müssen sie grundsätzlich auf eine eindeutige Spalte verweisen, die sich in einer Tabelle befindet, die bereits vorhanden ist (muss vor der referenzierenden Tabelle erstellt werden).

Fehler zu versuchen, eine Tabelle

Sie im Grunde ein ORA-00942 bekommen, weil Sie Ihre Tabelle existiert nicht fallen zu lassen, so kann es nicht gelöscht werden. Als Workaround können Sie diese Ausnahme abfangen. Es wurde in this answer beschrieben.

Fehler zu versuchen, eine Tabelle in diesem Thema

Sie haben mehrere Ausgaben zu erstellen. Die erste ist, wenn Sie die create-Anweisung der Tabelle Accountsite ausführen. Sie erhalten auch hier eine ORA-00942, weil Tabelle Player, die Sie versuchen, in Fremdschlüsseleinschränkung zu verweisen, nicht vorhanden ist. Sie müssen es vor Accountsite erstellen, damit es auf etwas verweisen kann, das existiert.

Der nächste Fehler tritt beim Erstellen einer Tabelle auf Stream. Es ist die ORA-02270. Sie können keine Spalte aus einer anderen Tabelle referenzieren, die nicht eindeutig ist. Sie müssen Playername Spalte eindeutig in Tabelle Player machen. Beachten Sie, dass Sie bei der Behebung des ersten Fehlers mit der Tabelle Accountsite für diese Tabelle den gleichen Fehler haben würden wie für Stream, da Sie versuchen, auf eine Spalte zu verweisen, die in beiden create table-Anweisungen nicht eindeutig ist (Sie müssen also auch die zweiter Fehler und es wird ohne Fehler gehen).

Jetzt die Toplist Tabelle. Es gibt keine Champion Spalte in Ihrer Champion Tabelle. Du meinst wahrscheinlich Championname. In diesem Fall muss auch die Tabelle Champion vor der Tabelle Toplist erstellt werden, da Sie keine Fremdschlüsseleinschränkung für eine nicht vorhandene Tabelle erstellen können. Sie müssen auch Ihre Championname Spalte in Champion Tabelle eindeutig (die gleiche wie Sie mit Playername in Tabelle Player) zu deklarieren.

In Champion verweisen Sie auf einen Sale und Skin Tisch - sie beide vor Champion Tabelle erstellt werden müssen (siehe oben).

Wie bei PlayerServer löst sich der Fehler beim Erstellen einer eindeutigen Integritätsbedingung für Player(Playername).

In ActiveServer haben Sie einen Tippfehler in Bezug auf "Acrivegame", die ich glaube, sollte Activegame sein.

+0

Sicher Stream usw. sollte Player-ID, nicht Name speichern? Ein Name mag sowieso nicht eindeutig sein, aber selbst wenn dies der Fall ist, bricht die Namensgebung die Normalisierung. Die ID ist praktisch, um bereits als FK zu verwenden. Gleiches mit dem Championnamen. –

+0

Gibst du mir Hinweise auf _not mine_ design? Ich helfe nur mit Fehlern. –

Verwandte Themen