- PR -

例外処理 PL/SQLのことで困ってます・・・

1
投稿者投稿内容
もんが〜
会議室デビュー日: 2005/08/03
投稿数: 6
投稿日時: 2005-09-30 15:57
本人チカラ不足のため件名の問題にぶちあたってます。
どうか良い案がありましたらお助けくださいm(_ _)m

PL/SQLで例外処理にジャンプしたいのですが、
例外処理に行かずエラー終了してしまいます。

エラー発生方法は、存在しないテーブル参照する方法です。
ちなみに、「PROGRAM_ERROR」という例外処理も
コーディングしてみたのですがダメでした。

PGサンプルとエラーメッセージを以下に記述させて
いただきます。

−−−−PG スタート−−−−
DECLARE
BEGIN

〜〜処理文〜〜

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
−−−−PG エンド−−−−

−−−−エラーメッセージ スタート−−−−
行12でエラーが発生しました。:
ORA-06550: 行12、列53:
PL/SQL: ORA-00942: 表またはビューが存在しません。
ORA-06550: 行12、列1:
PL/SQL: SQL Statement ignored
−−−−エラーメッセージ エンド−−−−

お馬鹿ですみませんが宜しくお願いいたします。m(_ _)m

以上です
宣伝中止!
大ベテラン
会議室デビュー日: 2005/08/30
投稿数: 155
お住まい・勤務地: 東京に作業場所変更・・・
投稿日時: 2005-09-30 16:09
PL/SQLではテーブルが存在することが前提になるはずなので、
テーブルが存在しないから例外処理を行うということは出来ないと思います。

本件、パッケージ作成などで出ているようでしたら、「テーブルが無いのでコンパイルが出来ません」という意味となります。

#伝え方が難しい・・・
_________________
#「やらない」と「出来ない」を混同してはならない
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-09-30 16:31
テーブルが存在しなかった時のOracleエラーをハンドリングするのではなく、
テーブルの存在を確認するSQLを発行し、NOT_FOUNDをハンドリングする方向でいかがでしょうか?

コード:
DECLARE
   name    VARCHAR2(100);
BEGIN
   select table_name into name from user_tables where table_name = 'asdfa' ;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('Table name not found in query ');
END;


甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-10-01 03:28
引用:

もんが〜さんの書き込み (2005-09-30 15:57) より:
PL/SQLで例外処理にジャンプしたいのですが、
例外処理に行かずエラー終了してしまいます。


無理です。テーブルやフィールドが存在しない場合、そもそもPL/SQLをコンパイル出来ませんので、PL/SQLで記述された処理は実行されません。PL/SQL内に記述された例外ハンドらではなく、呼び出し側(何の言語を使っているのか分からないけど)でトラップするしかないでしょう。

もしくはSELECT文をexecute immediate命令を使って動的SQLとして実行することになるでしょう。この方法ならPL/SQLで記述された例外ハンドラでエラーを処理できるはずです。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
もんが〜
会議室デビュー日: 2005/08/03
投稿数: 6
投稿日時: 2005-10-02 10:28
甕星さん、夏椰さん、宣伝中止!さん
さっそくのご回答ありがとうございます。

本当に参考になりました。
これで水曜日の導入は乗り越えられそうです。

どうもありがとうございました。

以上です
宣伝中止!
大ベテラン
会議室デビュー日: 2005/08/30
投稿数: 155
お住まい・勤務地: 東京に作業場所変更・・・
投稿日時: 2005-10-02 12:45
Oracle関連でしたら、OracleにOTNというのがあります。
Oracle関係の技術関連の質問等を受け付けています。
本件のようなものはそちらのほうも参考にしてみてはいかがでしょうか?
_________________
#「やらない」と「出来ない」を混同してはならない
1

スキルアップ/キャリアアップ(JOB@IT)