SQL Error: ORA-00922: manquant ou invalide 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)
Devrais-je pas utiliser le type de données CHAR?
J'entends c'est une mauvaise pratique de l'utiliser, mais je voulais faire en sorte takeoff_at et de destination doivent avoir un minimum de 3 caractères, car ils sont l'aéroport de codes.
C'est l'erreur que j'obtiens:
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:
- Nom de la Table ne peut pas avoir un espace.
- C'est une mauvaise pratique d'avoir des espaces, mais si vous voulez vraiment avoir un espace dans le nom de la table, vous devez l'entourer de guillemets doubles. Cela va conduire à plus de difficulté plus tard. Toutefois, une déclaration qui dit NOM de la TABLE NE peut pas AVOIR des ESPACES n'est pas tout à fait exact. Cela fonctionne: create table "j'aime les espaces" (space_id entier, chartered_flight CHAR(10))
Vous devez vous connecter pour publier un commentaire.
L'erreur que vous obtenez semble être le résultat du fait qu'il n'y a pas de trait de soulignement entre "agréés" et "vol" dans le nom de la table. Je suppose que vous voulez quelque chose comme ça où le nom de la table est
chartered_flight
.Généralement, il n'y a aucun avantage à déclarer une colonne comme
CHAR(3)
plutôt queVARCHAR2(3)
. La déclaration d'une colonne commeCHAR(3)
ne force pas l'existence de trois caractères de données utiles. Il dit juste Oracle à l'espace-tampon de données avec moins de trois caractères à trois caractères. C'est rare d'être utile si quelqu'un par inadvertance entre un code incorrect. Potentiellement, vous pouvez déclarer la colonne commeVARCHAR2(3)
puis ajouter unCHECK
contrainteLENGTH(takeoff_at) = 3
.Depuis deux
takeoff_at
etdestination
de l'aéroport codes, vous devriez vraiment avoir une table séparée de validité de l'aéroport de codes et de définir les contraintes de clé étrangère entre leschartered_flight
table et cette nouvelleairport_code
table. Qui garantit que seuls les valide l'aéroport de codes sont ajoutés et le rend beaucoup plus facile à l'avenir si un code d'aéroport changements.Et d'une convention de nommage point de vue, puisque les deux
takeoff_at
etdestination
de l'aéroport de codes, je dirais que les noms soient complémentaires et indiquer ce fait. Quelque chose commedeparture_airport_code
etarrival_airport_code
, par exemple, serait beaucoup plus significatif.CHECK
contraintes à la définition de la table (vous pouvez aussi les ajouter par la suite dans les séparerALTER TABLE
commandes). Mon parti pris serait toujours à faire quelque chose correctement si vous allez faire ce qui entraînerait l'ajout de la table supplémentaire si vous allez à ajouter de l'aéroport de codes à l'chartered_flight
table. Mais, évidemment, c'est à vous de déterminer la quantité de travail que vous voulez mettre dans une cession, soit d'un instructeur de soins, et si le travail supplémentaire vous aide à apprendre quoi que ce soit.airport_code
être la clé primaire de la nouvelleairport
table et créer une contrainte de clé étrangère sur ledeparture_airport_code
etarrival_airport_code
colonnes ou vous pouvez créer une séquence générée clé primaire sur leairport
table appeléeairport_id
, définir les colonneschartered_flight
êtredeparture_airport_id
etarrival_airport_id
et de créer des contraintes de clé étrangère. Leairport_id
approche plus générique, mais si l'aéroport de codes sont plus comme des codes d'état qui n'a jamais vraiment de changement, en utilisant le code de la clé est plus pratique.Vous ne devez pas utiliser l'espace de personnage et de nommage des objets de base de données. Même s'il est possible par l'aide de guillemets doubles(identificateurs),
CREATE TABLE "chartered flight" ...
, il n'est pas recommandé. Regardez de plus près iciil n'y a rien de mal à utiliser le CHAR comme ça..
Je pense que votre problème est que vous avez un espace dans votre tablename. Il doit être:
charteredflight
ouchartered_flight
..