SQL-Fehler: ORA-00922: fehlende oder ungültige option
CREATE TABLE chartered flight(flight_no NUMBER(4) PRIMARY KEY
, customer_id NUMBER(6) REFERENCES customer(customer_id)
, aircraft_no NUMBER(4) REFERENCES aircraft(aircraft_no)
, flight_type VARCHAR2 (12)
, flight_date DATE NOT NULL
, flight_time INTERVAL DAY TO SECOND NOT NULL
, takeoff_at CHAR (3) NOT NULL
, destination CHAR (3) NOT NULL)
Sollte ich das nicht verwenden des Datentyps CHAR?
Höre ich es ist eine schlechte Praxis, es zu benutzen, aber ich wollte es so machen takeoff_at und das Ziel haben, mindestens 3 Zeichen, weil Sie sind die Flughafen-codes.
Dies ist der Fehler, bin ich immer:
Error at Command Line:1 Column:23
Error report:
SQL Error: ORA-00922: missing or invalid option
00922. 00000 - "missing or invalid option"
*Cause:
*Action:
Tabellenname kann nicht von einem Raum in ihm.
Es ist eine schlechte Praxis, die leer, aber wenn Sie wirklich wollen, um ein Leerzeichen in den Namen der Tabelle, müssen Sie in Anführungszeichen setzen. Dies führt zu mehr ärger später. Jedoch eine Anweisung, die sagt Tabellenname KEINE LEERZEICHEN enthält ist nicht genau richtig. Das funktioniert: create table "ich Liebe Räume" (space_id integer, chartered_flight CHAR(10))
Es ist eine schlechte Praxis, die leer, aber wenn Sie wirklich wollen, um ein Leerzeichen in den Namen der Tabelle, müssen Sie in Anführungszeichen setzen. Dies führt zu mehr ärger später. Jedoch eine Anweisung, die sagt Tabellenname KEINE LEERZEICHEN enthält ist nicht genau richtig. Das funktioniert: create table "ich Liebe Räume" (space_id integer, chartered_flight CHAR(10))
InformationsquelleAutor Jatinder Singh | 2011-12-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler, den du immer zu sein scheint das Ergebnis der Tatsache, dass es kein Unterstrich zwischen "gechartert" und "Flug" der name der Tabelle. Ich nehme an, Sie wollen so etwas wie diesem, wo der name der Tabelle ist
chartered_flight
.Gibt es generell keinen nutzen für die Deklaration einer Spalte als
CHAR(3)
eher alsVARCHAR2(3)
. Deklarieren Sie eine Spalte alsCHAR(3)
nicht zwingen, es zu drei Zeichen (nützliche) Daten. Es zeigt nur, dass Oracle space-pad-Daten mit weniger als drei Zeichen, drei Zeichen. Das ist kaum hilfreich, wenn jemand versehentlich in eine falsche code. Potenziell könnten Sie deklarieren Sie die Spalte alsVARCHAR2(3)
und fügen Sie dann eineCHECK
Einschränkung, dassLENGTH(takeoff_at) = 3
.Da beide
takeoff_at
unddestination
sind Flughafen-codes, die Sie wirklich haben sollte eine separate Tabelle der gültigen Flughafen-codes und definieren Sie Fremdschlüssel-constraints zwischen denchartered_flight
Tabelle und das neueairport_code
Tabelle. Damit ist sichergestellt, dass nur gültige airport-codes Hinzugefügt und macht es viel einfacher, in der Zukunft, wenn Sie einen Flughafen-code ändert.Und von einer Namenskonvention Standpunkt aus, da beide
takeoff_at
unddestination
sind Flughafen-codes, ich würde vorschlagen, die Namen ergänzen und zeigen, dass der Tat. So etwas wiedeparture_airport_code
undarrival_airport_code
zum Beispiel, wäre viel sinnvoller.Ich fügte hinzu, ein Beispiel für die Deklaration der
CHECK
Einschränkungen für die definition der Tabelle (Sie können auch fügen Sie Sie anschließend in separatenALTER TABLE
Befehle). Meine Voreingenommenheit würde immer etwas zu tun korrekt, wenn du gehst, es zu tun, das würde bedeuten, das hinzufügen der zusätzlichen Tabelle, wenn Sie hinzufügen, Flughafen-codes, um diechartered_flight
Tabelle. Aber, offensichtlich, es ist bis zu Ihnen, um zu bestimmen, wie viel Arbeit, die Sie wollen, um in einer Zuweisung, ob der Lehrer kümmern, und ob die zusätzliche Arbeit hilft, erfahren Sie nichts.OK sagen wir ich wollte zu implementieren, die separate Tabelle für die Flughafen-codes, wie würde dann die beiden link? mache ich departure_airport_code und Ankunft Fremdschlüssel einer Spalte airport_code in der Flughafen-relation?
auch würde das Verhältnis zwischen kartiert Flug und Flughafen werden viele zu viele geben? würde es die gelöst werden müssen? @Justin Höhle
Sie können entweder lassen Sie
airport_code
werden die Primärschlüssel der neuenairport
Tabelle, und erstellen Sie eine foreign key-Einschränkung sowohl diedeparture_airport_code
undarrival_airport_code
Spalten oder Sie können eine sequence generierten Primärschlüssel auf dieairport
Tabelle namensairport_id
definieren Sie die Spalten inchartered_flight
zudeparture_airport_id
undarrival_airport_id
und erstellen Sie die foreign key-Einschränkungen. Dieairport_id
Ansatz ist allgemeiner, aber wenn die Flughafen-codes sind mehr wie Status-codes, die nie wirklich ändern, verwenden Sie den code als Schlüssel praktischer ist.InformationsquelleAutor Justin Cave
Sollten Sie nicht verwenden Leerzeichen, während die Benennung der Datenbank-Objekte. Obwohl es möglich ist, durch die Verwendung von doppelten Anführungszeichen(quoted Identifier),
CREATE TABLE "chartered flight" ...
, ist es nicht empfehlenswert. Nehmen Sie einen genaueren Blick hierInformationsquelleAutor a1ex07
es ist nichts falsch mit der Verwendung von CHAR..
Ich glaube, dein problem ist, dass Sie einen Platz in Ihrem tablename. Es sollte sein:
charteredflight
oderchartered_flight
..InformationsquelleAutor StevieG