0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【DB入門】付録B よくあるエラーと対処法

0
Last updated at Posted at 2026-10-27

SQL Developer で SQL を実行したときに出るエラーのうち、この教材でよく出るものをまとめます。エラーは ORA- と5桁の番号で始まるので、まず番号で探してください。各章の「うまくいかないときは」も参照してください。

B.1 エラーメッセージの読み方

SQL がエラーになると、「文の実行」では画面下に赤い文字でメッセージが表示され、「スクリプトの実行」では「スクリプト出力」にメッセージが表示されます。

スクリプト出力
コマンドの1行目で開始中にエラーが発生しました :
INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME) VALUES (1, '経理部')
エラー・レポート -
ORA-00001: 一意制約(DBAPP.PK_DEPARTMENT)に反しています
  1. どの SQL でエラーになったか:「コマンドの N 行目」と、その SQL 文が表示されます。複数の SQL を実行したときは、ここでどれが失敗したかを見ます
  2. エラー番号:ORA-00001 のように、ORA- と5桁の番号。この付録はこの番号で引けます
  3. メッセージ:制約に反したときは制約の名前、列が無いときは列名、のように原因の手がかりが入っています

文法の間違い(, の抜けなど)のエラーは、Oracle が 最初につまずいた場所 を指しています。本当の間違いは、その少し手前にあることが多いので、指された場所の前後を見直してください。

【便利な使い方】スクリプトの実行は、エラーの後も続く

F5(スクリプトの実行)では、途中の SQL がエラーになっても、残りの SQL は実行されます。「スクリプト出力」を上から順に読んで、どの SQL が失敗したかをすべて確認してください。

【便利な使い方】メッセージで分からないときは、番号で検索する

Oracle のエラーメッセージは、ほかのデータベースと比べて、原因が分かりにくい言い回しのことがあります。たとえば、ORA-00904: 無効な識別子です。 は列名のつづりの間違い、ORA-00933: SQLコマンドが正しく終了されていません。 はカンマの抜けや余計な語で出ることがよくありますが、メッセージからは読み取りにくいです。

メッセージを読んでも原因が分からないときは、ORA-00904 のようなエラー番号か、メッセージの文をそのまま検索してください。同じエラーに出会った人の情報や、原因の説明が見つかります。番号は ORA-904 ではなく、5桁の ORA-00904 のまま検索します。

Oracle の公式ドキュメント「エラー・メッセージ」(日本語)でも、エラー番号から原因と対処を引けます。この付録に無いエラーが出たときに使ってください。

B.2 接続のエラー

エラー 原因と対処 章
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。 ユーザー名かパスワードが違います。大文字と小文字も区別されます。system のパスワードはインストール時に設定したもの、dbapp は dbapp 第2章
ORA-12514: リスナーは接続記述子でリクエストされたサービスを現在認識していません 「SID」が選ばれたままか、サービス名の入力ミスです。「サービス名」を選び、XEPDB1(mac では FREEPDB1) と入力します。Oracle を起動した直後にも出ることがあるので、1分ほど待ってからやり直します 第2章
IO エラー: The Network Adapter could not establish the connection
(接続が拒否されました)
Oracle Database が起動していません。「サービス」アプリで OracleServiceXE と OracleOraDB21Home1TNSListener を開始します。ホスト名が localhost、ポートが 1521 になっているかも確認します 「開発環境の準備」
ORA-65096: 共通ユーザーまたはロール名が無効です XEPDB1 ではなく CDB に接続しています。接続のプロパティで「サービス名」を XEPDB1(mac では FREEPDB1) に直します 第2章
ORA-01045: ユーザーDBAPPにはCREATE SESSION権限がありません。ログオンが拒否されました。 GRANT が実行されていません。XE_SYSTEM で GRANT ALL PRIVILEGES TO dbapp; を実行します 第2章
ORA-01920: ユーザー名'DBAPP'は他のユーザー名またはロール名と競合しています すでに dbapp ユーザーがあります。前に作ったものをそのまま使います 第2章
ポート 1521 が使えない 別の Oracle など、同じポートを使うソフトウェアが動いています。パソコンの管理者に相談してください 「開発環境の準備」

B.3 SQL の書き間違いのエラー

エラー 原因と対処 章
ORA-00933: SQLコマンドが正しく終了されていません。 句の順番が違う(WHERE と ORDER BY の前後など)、文字の値を ' で囲んでいない、テーブルの別名に AS を付けた、前の SQL の ; が無く2つの SQL がつながった、のいずれかです 第6章・第10章
ORA-00936: 式がありません。 列名の最後に余分な , がある(SELECT NAME, AGE, FROM)、WHERE の後ろに条件が無い、== と書いた、ON の後ろに条件が無い 第5章・第7章
ORA-00920: 関係演算子が無効です。 => のように比較演算子の向きが逆です。>=・<= と書きます 第6章
ORA-00907: 右カッコがありません。 ( と ) の数が合っていないか、CREATE TABLE の列と列の間の , が抜けています 第3章
ORA-00917: カンマがありません。 INSERT の文字の値を ' で囲んでいないか、値と値の間の , が抜けています 第4章
ORA-00905: キーワードがありません。 NOT NULL などのつづりの間違い、JOIN の後ろの ON の抜け 第3章・第10章
ORA-00902: データ型が無効です。 CREATE TABLE のデータ型のつづりが違います(NUMBR、VARCHAR2 の 2 の抜けなど) 第3章
ORA-01756: 引用符付き文字列が正しく終了していません ' が片方しかありません 第4章
ORA-00911: 文字が無効です。 全角の ‘ ’ や、SQL で使えない記号が混ざっています。半角の ' で書き直します 第2章
ORA-00909: 引数の個数が無効です。
ORA-00938: 関数の引数が不足しています。
関数に渡す引数の数が違います 第8章
SP2-0734: "SELEC * FR..."で開始するコマンドが不明です SELECT などの先頭のキーワードのつづりが違います 第5章

B.4 テーブル・列・名前のエラー

エラー 原因と対処 章
ORA-00942: 表またはビューが存在しません。 テーブル名の打ち間違い、テーブルをまだ作っていない、XE_SYSTEM のワークシートで実行している(dbapp のテーブルは見えない)、のいずれかです 第3章・第5章
ORA-00904: "〇〇": 無効な識別子です。 列名の打ち間違い、そのテーブルに無い列、関数名の打ち間違い、WHERE・HAVING・ORDER BY に別名を書いた、文字の値を " で囲んだ、結合で別名と列の組み合わせが違う("E"."DEPT_NAME")、CREATE TABLE の最後の列の後ろに余分な , がある、のいずれかです 第5章・第8章・第9章
ORA-00955: すでに使用されているオブジェクト名です。 同じ名前のテーブルやシーケンスがすでにあります。作り直すなら先に DROP します 第3章
ORA-02449: 表の一意キーまたは主キーが外部キーに参照されています。 参照されている部署テーブルを先に DROP しようとしています。社員テーブルから先に消します 第3章
ORA-00918: 列の定義が未確定です。 結合で、両方のテーブルにある列(DEPT_ID)を別名なしで書いています。e.DEPT_ID のように別名を付けます 第10章

B.5 制約と値のエラー

エラー 原因と対処 章
ORA-00001: 一意制約(DBAPP.PK_DEPARTMENT)に反しています 主キーが重複しています。INSERT では シーケンス名.NEXTVAL を使い、同じ INSERT を2回実行していないかを確認します 第4章
ORA-01400: ("DBAPP"."DEPARTMENT"."DEPT_NAME")にはNULLは挿入できません。 NOT NULL の列に値を入れていません。表示された列名の値を INSERT に加えます 第4章
ORA-01407: ("DBAPP"."EMPLOYEE"."AGE")をNULLには更新できません。 NOT NULL の列を UPDATE で NULL にしようとしています 第7章
ORA-02290: チェック制約(DBAPP.CK_EMPLOYEE_GENDER)に違反しました CHECK 制約の条件に合わない値(GENDER に 1・2 以外)を入れようとしています 第4章
ORA-02291: 整合性制約(DBAPP.FK_EMPLOYEE_DEPARTMENT)に違反しました - 親キーがありません 外部キーの参照先に無い値(存在しない部署ID)を入れようとしています。部署テーブルにある部署IDを指定します 第4章
ORA-02292: 整合性制約(DBAPP.FK_EMPLOYEE_DEPARTMENT)に違反しました - 子レコードがあります 外部キーで参照されている行(社員がいる部署)を DELETE しようとしています。参照している側を先に変更・削除します 第7章
ORA-12899: 列"DBAPP"."DEPARTMENT"."DEPT_NAME"の値が大きすぎます(実際: 23、最大: 20) 列の長さ(VARCHAR2(20 CHAR))を超える文字列を入れようとしています 第4章
ORA-01438: この列に許容される指定精度より大きな値です 数の列の桁数(NUMBER(3) など)を超える数を入れようとしています 第4章
ORA-01722: 数値が無効です。 数の列に文字を入れた、数の列と文字を比べた、文字列を + でつなげようとした(連結は ||)、のいずれかです。INSERT では列名と値の順番がずれていないかを確認します 第4章・第8章
ORA-00947: 値の個数が不足しています。
ORA-00913: 値の個数が多すぎます。
INSERT の列名の数と値の数が合っていません 第4章
ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています 日付として解釈できない文字列を日付の列と比べています。DATE '2000-06-22' の書き方にします 第8章

B.6 集計・結合のエラー

エラー 原因と対処 章
ORA-00937: 単一グループのグループ関数ではありません。 集計関数と普通の列を一緒に書いていて、GROUP BY がありません 第9章
ORA-00979: GROUP BYの式ではありません。 GROUP BY に書いていない列を、SELECT・HAVING・ORDER BY に書いています 第9章・第10章
ORA-00934: ここではグループ関数は使用できません。 WHERE に集計関数を書いています。HAVING に書きます 第9章

B.7 エラーではないが、思ったとおりにならないとき

症状 原因と対処 章
SELECT の結果が0行 条件に合う行が無いか、文字の値が1文字違っています(空白、全角と半角、大文字と小文字)。= NULL と書いていると必ず0行になります(IS NULL を使う) 第6章・第6章
結果の順番が毎回違う ORDER BY が無いか、ORDER BY の列の値が同じ行があります。2つ目の列(主キーなど)を ORDER BY に加えます 第5章
「0行更新しました。」「0行削除しました。」 WHERE の条件に合う行がありません。同じ WHERE 句で SELECT して確かめます 第7章
想定より多くの行が更新・削除された WHERE の条件が広いか、WHERE を書き忘れています。COMMIT 前なら ROLLBACK で戻します 第7章
ほかの接続(別の人、アプリ)から変更が見えない COMMIT していません 第4章
ROLLBACK しても戻らない すでに COMMIT されています。DDL(CREATE・DROP)を実行すると自動で COMMIT されることにも注意します 第4章
ID が 1, 2, 4 のように飛ぶ エラーになった INSERT や ROLLBACK した INSERT でも、シーケンスの番号は消費されます。番号が飛ぶこと自体は問題ありません。そろえたいときは作り直します 第4章
日付が 00-06-22 のように2桁の年で表示される 日付書式の設定が反映されていません。設定を確認し、SQL Developer をいったん終了して、もう一度起動してから接続します 「開発環境の準備」
結果が表ではなく文字で表示される F5 で実行しています。Ctrl + Enter で実行すると表で表示されます 第2章
結合の結果の行数が多すぎる(40行など) ON の結合の条件が間違っているか抜けています 第10章
社員のいない部署が出てこない、人数 0 が 1 になる INNER JOIN を LEFT OUTER JOIN に、COUNT(*) を COUNT(e.EMP_ID) にします 第10章・第10章

前へ

付録A この教材の SQL 一覧

次へ

付録C SQL 早見表・SQL Developer 早見表・用語集

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?