4

有効なプロシージャがあり、insert..select ステートメントが含まれています。このプロシージャを実行すると、このステートメントから「ORA-00904: : 無効な識別子」エラーが発生する場合があります。それはどうして理論的に可能でしょうか?トリガーや動的 SQL はありません。

また、sqlerrm の ORA-00904 テキストには、Oracle が無効と見なす特定の識別子へのポインタがありません。

Oracle バージョン 9.2.0.8

編集2:

その選択内から呼び出された関数に問題があったことがわかりました(定数に置き換えて、すべてが機能しました)。おそらくそれが、ORA-00904 が識別子を与えなかった理由です。それでも、問題は残ります。動的 SQL を使用しないプリコンパイル済みコードでこのエラーが発生するのはなぜでしょうか。

4

2 に答える 2

2

この種のエラーは、パッケージは有効であるが、本体でコンパイルが必要で例外をスローするパッケージにアクセスすると発生する可能性があると思います。

もう 1 つの理由は、現在のユーザーの権限で実行される authid current_user を持つコードである可能性があります (所有ユーザーの権限では通常とは異なります)。このようなプロシージャは、あるユーザーで呼び出すと失敗し、別のユーザーで実行すると成功する可能性があります。

于 2012-05-18T06:14:54.023 に答える
0

あなたはすでに解決策を見つけているので、これはあなたの問題ではありません。ただし、パッケージ関数に本体があり、仕様シートに関数シグネチャがない場合にこのエラーが発生するというメモを追加したかったのです。

于 2015-03-16T17:22:56.247 に答える