質問: ### 前提・実現したいこと ここに質問したいことを詳細に書いてください (例)バッチで.sqlを実行し、DB内の該当レコードを削除するツールを作っています (バッチで条件を指定する) エラーメッセージ出力され実行できません。 ORACLEの問題なのでしょうか?(ORACELE12Cを使用しています) ### 発生している問題・エラーメッセージ ``` ORA-20003:ORU-10036:object sumple is invalid and cannot be described ORA-06512:"SYS.DBMS_DESCRIBE",行147 ORA-06512:行1 ``` ### 該当のソースコード ``` 以下がエラーメッセージに該当するソースです。 ``` 1>>>create or replace procedure sumple 2>>> 3>>>IS ・ ・ ・ 143>>>EXCEPTION 144>>>when others 145>>>then 146>>>DBMS_OUTPUT.PUT_LINE(SQLCODE||':'||SQLERRM); 147>>>RAISE 148>>>END MY_LOG_OUT ### 試したこと A5M2のストアプロシージャで実行 ### 補足情報(言語/FW/ツール等のバージョンなど)
回答: 提示のコードは例外処理部分で、実際にその箇所でエラーが起きているわけではありません。 エラーコードを見ると以下が参考になるでしょう。 データベース・トラブル10選---最終回 SQL文の異常終了を防ぐ(1) 以下抜粋。 > > ORA-20003 は,DBMS_DESCRIBEパッケージの“DESCRIBE_PROCEDURE”と呼ぶプロシージャが発行するエラーである。ストアド・プログラムを実行する際は,このプロシージャに引き数としてオブジェクト名(プロシージャ名)を与えるが,このオブジェクトが「INVALID(無効)」の状態であったり,存在しなかったりすると,ORA-20003のエラーが発生する。 > > > 原因としては、そのストアドプロシージャに関係するテーブルの定義や呼び出しているストアドを変更したような場合にINVALIDになったりします。 状況を確認して再度ストアドをコンパイルすれば良いと思いますが、関係が複雑に入り組んでいたりすると個別に行うのは非常に手間なので一括コンパイルの利用がお薦めです。 ORACLEで無効オブジェクトを一括でリコンパイルする。 但し、共同でのプロジェクトなどで作業されている場合には、他への影響も考えられますから、確認の上行って下さい。