[解決済み] SQLエラーです。ORA-00922: オプションがないか無効です。
質問
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)
CHARデータ型は使わない方が良いですか?
しかし、takeoff_atとdestinationは空港コードなので、最低3文字必要なのです。
これは私が得ているエラーです。
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:
解決方法は?
このエラーは、テーブル名の "chartered" と "flight" の間にアンダースコアがないことが原因であるように思われます。 テーブルの名前は次のようなものだと思います。
chartered_flight
.
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)
一般に、カラムを以下のように宣言することにメリットはありません。
CHAR(3)
よりも
VARCHAR2(3)
. カラムを
CHAR(3)
は、3文字の(有用な)データを強制するものではありません。 ただ、3文字未満のデータを3文字にスペースパッドするよう、Oracleに指示するだけです。 これでは、誰かがうっかり間違ったコードを入力してしまったときに、役に立つとは思えません。 可能性としては、カラムを次のように宣言することができます。
VARCHAR2(3)
を追加し、さらに
CHECK
という制約があります。
LENGTH(takeoff_at) = 3
.
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 CHECK( length( takeoff_at ) = 3 )
, destination CHAR (3) NOT NULL CHECK( length( destination ) = 3 )
)
というのは、どちらも
takeoff_at
と
destination
が空港コードである場合、有効な空港コードのテーブルを別に用意して
chartered_flight
テーブルと、この新しい
airport_code
テーブルを作成します。 これにより、有効な空港コードのみが追加されるようになり、将来的に空港コードが変更された場合にも、より簡単に対応できるようになりました。
また、命名規則の観点から、両方の
takeoff_at
と
destination
が空港コードである場合、名前を補完し、その事実を示すようにすることを提案します。 例えば
departure_airport_code
と
arrival_airport_code
などの方がよっぽど意味がある。
関連
-
[解決済み】ストアドプロシージャーのエラー ORA-06550
-
[解決済み】2つの列を分割する方法は?
-
[解決済み】Postgresのエラー。式として使用されるサブクエリによって返される複数の行
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] ORA-01790: 式は、対応する式と同じデータ型でなければならないエラーが発生するケース
-
[解決済み] WHERE x IN (5) vs WHERE x = 5 ...なぜINを使うのか?
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] リンクされたサーバーの NULL に対して OLE DB プロバイダー Microsoft.Jet.OLEDB.4.0 のインスタンスを作成できません。
-
[解決済み] MySQLのON句の不明なカラム
-
[解決済み] PLS-00428: この SELECT 文では INTO 句が必要です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】CREATE VIEW は、バッチ内の唯一のステートメントでなければなりません。
-
[解決済み】ストアドプロシージャーのエラー ORA-06550
-
[解決済み】警告。Aqua Data Studioの集約や他のSET操作でNull値が排除される。
-
[解決済み】単一のクエリで加重平均を計算する
-
[解決済み】sys.dm_exec_sql_textはどのように機能するのでしょうか?
-
[解決済み] SQL Server サブクエリが 1 つ以上の値を返しました。これは、サブクエリが =, !=, <, <= , >, >= のように続く場合は許可されません。
-
[解決済み] ORA-01735: 無効な ALTER TABLE オプション - ヒキガエル
-
[解決済み] Ruby On Rails で NuoDB を使用して SQL コマンドを手動で実行する方法
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] 時間を時間単位や10分単位でグループ化する方法