からくりブログ

株式会社からくり社員のブログです

【備忘録】SQLエラーの対処方法_20190727

「PLS-00302: コンポーネント’xxxxx’を宣言してください。」

Oracle DBを使用していて、少しの間、ハマりましたので、メモメモ。
原因、対策とエラー内容を見ると、関係ないのかもしれない。
(Oracle DBだからじゃないと思うけど。。。)

ちなみに、上記エラーが出た場合の通常の対処法は、
「該当文字列 (‘xxxxx’)をリネーム(xxxxx AS XXX など)する」
ことである。
小文字、大文字を区別しないOracleでは、
小文字のテーブル名、カラム名ではうまく認識しないことがあるため
(ということらしい)。

では、本題。

テスト環境が2つ、本番環境と計3つのDB環境がある。
いつもはテスト環境①を使用して、OKなら本番環境に適用している。
1機能の動作確認としてテスト環境②を使用することになった。

環境のコピーはシェルを使っている。
もちろん動作確認は済んでいる。
(というか、先輩が使用していたもの)
テスト環境①上では、特に問題が発生しなかった。

テスト環境②に適用して、ある Function を確認したら、
コンパイルエラーが発生した。
その時に出たエラー内容が「PLS-00302」である。
Google先生に聞いてみて、通常対処方法がわかったが、
カラム名は大文字であるため、別の原因があることがわかった。
(振り出しに戻る感)

今回のシェルを確認したり、
今回の変更であるテーブル、VIEW、INDEXを比較したり、
一つずつ手動で適応したり、
とやっていたら、半日近く何も進展がなかった。

続けて、Function内で使用しているが、
今回変更を加えていない VIEWを比較したところ、
一つだけ異なるカラムを発見!

このカラムを現在使用しているカラムに直して、
Functionをコンパイルしたところ、
見事にコンパイルエラーは発生しなくなった。
・直す前に戻すと、コンパイルエラーになることから、
 このカラムが原因である。

これ変更した理由については、
前々回のテストで、現新比較で
手動で変更したカラム(前Ver)に戻したそうだ。
それが残っていたようだ。
・何で他は大丈夫なのか、
 何でこれだけ残っているのか、
 (もちろん他に残っていないか確認した)
 わからないけれども。。。
・カラム名違いは「PLS-00302」になるんですかね?

まあ、これも経験ということで。(諦め)
・忘れるだろうから、今回の備忘録に残すのですよ。

  説明
エラー番号 PLS-00302: コンポーネント’xxxxx’を宣言してください。
原因 使用Viewのカラムの設定が異なる。
対策 使用Viewのカラムの設定を合わせる。
教訓1 表示されるPL/SQLエラー番号が正しいとは限らない。。。
教訓2 変更した環境は終わったら、元に戻しておきましょう。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>