「SQLエラー」タグアーカイブ

Oracle「ORA-00942: 表またはビューが存在しません」エラー発生原因と解決策

Oracleデータベースを扱う中で、開発者や運用担当者が最も遭遇しやすいエラーのひとつが
「ORA-00942: 表またはビューが存在しません」 です。

本記事では、発生原因と具体的な解決策をわかりやすく解説します。


✅ ORA-00942とは?

ORA-00942: table or view does not exist
(表またはビューが存在しません)

SQLで参照したテーブルまたはビューが見つからないときに発生するエラーです。
主に DML(SELECT / INSERT / UPDATE / DELETE)実行時に発生します。


✅ 主な発生原因

原因説明
テーブル名・ビュー名の誤字タイプミス、大小文字の不一致
スキーマ名を指定していないschema.table が必要なのに table だけ記述
オブジェクトが存在しない作成前、削除済み、まだコミットされていない
権限不足SELECT権限などが付与されていない
PUBLIC SYNONYMが無い/壊れているシノニム経由アクセス失敗
参照先データベースリンクが不正DBリンク先にオブジェクトが存在しない

✅ 代表的な発生例と解決策

① テーブル名の誤字

対策
スペルを確認し、USER_TABLESALL_TABLES で存在確認。


② スキーマ指定漏れ

本当は他スキーマのテーブル:

対策
必要に応じてスキーマ名を付けて記述。


③ 権限不足

権限が無い場合、テーブルが存在していても参照できません。

✅ 権限付与例(管理者実行)


④ シノニム問題

シノニム経由で参照する場合:

対策

壊れていれば再作成。


⑤ コミット忘れ

セッションAで作成 → セッションBから参照、未コミットの場合

対策
テーブル作成後は COMMIT;


✅ 原因の切り分け手順(チェックリスト)

チェック項目コマンド / 方法
テーブルが存在するかSELECT table_name FROM user_tables;
他スキーマかSELECT owner, table_name FROM all_tables;
権限があるかSELECT * FROM user_tab_privs;
シノニム確認SELECT * FROM all_synonyms;
大文字小文字SQL識別子は大文字扱い、""付きは注意

✅ よくある落とし穴

  • "テーブル名"(ダブルクォーテーション付き)で作成 → 大文字小文字が区別される

  • パーティションテーブルの参照ミス

  • DB移行後の権限不足

  • テスト環境と本番環境のスキーマ構成違い


✅ まとめ

要点内容
エラー原因オブジェクトなし・スキーマ指定漏れ・権限不足
解決方法テーブル存在確認、権限確認、スキーマ明記
コツuser_tables / all_tables で確認

Oracleはスキーマ管理と権限管理が厳密なため、
「テーブルが本当に存在するか」「アクセス権があるか」 が重要です。


✅ 例:実務での対応テンプレ

■ 発生時に実施する確認

  • SQLを確認(スペル・スキーマ)

  • ALL_TABLESで存在確認

  • 権限を確認

  • 必要に応じて GRANT 実施

この手順を覚えておけば、ほぼ解決できます。


💬 最後に

Oracleの権限周りは慣れるまで少し難しいですが、
このエラーは落ち着いて確認すれば必ず解決できます。

記事が役に立ったら、ぜひシェアやブックマークをお願いします!

Oracle「ORA-02292:整合性制約が違反しています」の原因と解決法

データ削除(DELETE)や更新(UPDATE)を行った際に、次のようなエラーが発生したことはありませんか?

ORA-02292: 整合性制約 (制約名) が違反されています - 子レコードが見つかりました。

このエラーは、「削除しようとしたデータが別のテーブルから参照されているため、勝手に消せません」という意味になります。本記事では、エラーの原因と解決方法を実例付きでわかりやすく解説します。


✅ ORA-02292とは?エラーの意味をわかりやすく解説

ORA-02292エラーは、外部キー(FOREIGN KEY)による整合性制約に違反したときに発生します。

つまり、

✅ 親テーブルのレコードを削除 or 更新しようとした
✅ でも、そのデータを参照している子テーブルのデータが存在している
✅ そのため削除・更新できず、エラーになる

という状況です。


✅ エラーが発生する典型的な例

📘 テーブル構成(例)

テーブル名内容備考
EMP社員マスタ親テーブル
SALARY給与履歴子テーブル(EMP_IDを参照)

このEMP_ID = ‘E001’ の社員が SALARY テーブルに登録されている場合、以下のエラーが発生します。

ORA-02292: 整合性制約 (HR.SALARY_FK) が違反されています - 子レコードが見つかりました

✅ 原因を確認する方法(参照関係を特定)

✅ どのテーブルから参照されているのかを確認

このSQLで、外部キー制約の一覧を確認できます。


✅ 解決方法4パターン(状況に応じて選択)

方法解決内容利用シーン注意点
① 子テーブルを先に削除手動で削除一時的に消す場合データ消失に注意
② 外部キーをNULL許可にUPDATE対応可柔軟な参照解除用設計による
③ ON DELETE CASCADEを設定親削除で自動削除自動削除したい場合子も消える
④ 制約を一時的に無効化一時的に制約OFF大量データ移行時使い方注意

✅ 解決方法の実例SQL

✅ ① 子テーブルのデータを先に削除


✅ ② 外部キー制約をNULL許可に変更


✅ ③ 親削除時に子も自動削除(ON DELETE CASCADE)


✅ ④ 一時的に制約を無効化(※使用注意)


✅ よくある質問(FAQ)

❓ UPDATEでも発生する?

はい。親キーを変更して子テーブルとの整合性が崩れる場合にも発生します。

❓ 本当に削除して良いかわからない…

業務データでは「子テーブルに履歴が残っている=重要なデータ」のケースも多いため、安易な削除は避けましょう。


✅ まとめ:削除順序と制約を理解することが鍵!

抑えるポイント内容
エラー原因子テーブルに参照されている
重要事項削除順序「子→親」
推奨対策ON DELETE CASCADEの活用も検討