[Oracle] ビューなどの作成時に発生するORA-00942(ORA-01031)エラー | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

ビューやプロシージャを作成する際、ビューやプロシージャ内のSQL文1つ1つはちゃんと実行できるのに
ORA-00942: 表またはビューが存在しません。

というエラーが発生することがあります。


これは、ビューやプロシージャのコンパイル時には、オブジェクトへのアクセス権限がロールではなくシステム権限とオブジェクト権限で判断されることが原因です。


このエラーを回避してビューやプロシージャを作成するには、ビューやプロシージャで参照するオブジェクトに対するSELECT権限、もしくはSELECT ANY ~システム権限を作成するユーザに付与しなければなりません。



なお、参照するオブジェクトがデータ・ディクショナリの場合、ORA-00942ではなく、

ORA-01031: 権限が不足しています。

が発生することもあります。


この場合、該当するデータ・ディクショナリに対するSELECT権限、もしくはSELECT ANY DICTIONARYシステム権限を作成するユーザーに付与しなければなりません。