先日、Oracleのストアドプロシージャを改修し、本番環境DBへ反映させようとした時のこと。
「ORA-00942:表またはビューが存在しません。」のエラーが出てきました。
げ・・・本番リリースで問題発生か、参ったな・・・でも開発環境では大丈夫だったけどなんでだろう。
というわけで原因調査開始。
まず、ストアドを改修前に戻してDBに反映。これはOK。つまり、改修箇所に問題があると。
改修内容はテーブルのSELECTとUPDATEを追加したくらいです。
当然、SELECT、UPDATE対象のテーブル(テーブルA、B)は存在しています。なのになぜこんなことを言われるのか・・・
考えても仕方ないので、エラーメッセージを基に検索。
すると、原因として「テーブルにアクセスする権限がない」というのを発見。これかな?
SELECT * FROM DBA_TAB_PRIVS;
これで全ユーザの権限情報を取得します。すると、ストアドの存在するユーザ(スキーマ)にはテーブルA、BのSELECT、UPDATE権限が無いのがわかりました!
これで原因がわかりましたので、次に権限を付与します。権限付与はGRANT文を使います。
例)GRANT SELECT ON USER_A.TABLE_A TO USER_B;
権限付与後、再度改修後のストアドを反映したところ・・・無事成功! あー良かった。
今まで権限ってあまり意識していなかったので、良い経験となりました。