[pgsql-jp: 31538] Re: オラクルストアドからの移行

Ken-ichi Nakayama aguri @ ssl.fujitsu.com
2003年 11月 19日 (水) 22:27:45 JST


なかやまといいます。

すみません、PL/pgSQLのRAISEを例外トラップと混同して
いたようです。(PL/SQLのRAISEと同じように例外の「発生」ですね。)

副ブロック(階層ブロック)も存在しているようですが、
プログラマガイドの「19.8.1. 例外」の説明が
PL/pgSQLの構文レベルでは例外トラップをサポートしていない
ように思えます(呼び出し元(エグゼキュータ)など上位に
エラーは返されるというニュアンス)

19.11 の Oracle PL/SQLからの移行においては、
NOTFOUND のような、IF文で後判定できるものの例がありますが、
マニュアルの文脈からはどうも ほとんどの例外は
基本的にはPL/pgSQLレベルでトラップできないように
思えるのですが。

#すいません、人に回答しておいて結局わからずじまい(^^;)


On Wed, 19 Nov 2003 21:34:26 +0900
Ken-ichi Nakayama <aguri @ ssl.fujitsu.com> wrote:

aguri> なかやまといいます。
aguri> 
aguri> ストアドの移行にPL/pgSQLを使われるであろうと
aguri> 仮定します。
aguri> 各社様とも移行サービスなど設けておられるところもあると
aguri> 思いますが、簡単にコンバートできる方法はあまり聞いたことがありません。
aguri> が、単純な構文のコンバートなら、7.3.2 のマニュアルですが
aguri> 
aguri> http://www.postgresql.jp/document/pg732doc/programmer/plpgsql-porting.html
aguri> 
aguri> で対応できるのではないでしょうか?
aguri> 
aguri> ただ、気にされているEXCEPTION(例外トラップ)については、
aguri> Oracle PL/SQLとの機能格差により、PL/pgSQLでは標準で実現できない
aguri> 部分もあるかもしれませんが、今回のようにログ出力ならば、
aguri> 条件付で
aguri> 
aguri> http://www.postgresql.jp/document/pg732doc/programmer/plpgsql-errors-and-messages.html
aguri> 
aguri> のように RAISE NOTICE 等でフォローできるのではないでしょうか?
aguri> サーバログに出力とありますので出力先が任意のファイルだと
aguri> 工夫が必要になるかもしれません。
aguri> ただ、Oracle PL/SQLや、Java(言語として)などなら可能な
aguri> ブロック階層レベルごとの例外できるようにはどうも
aguri> なっていないようなので、そのようなコードが他に存在するなら
aguri> 機械的なソースコンバートは困難なのではないでしょうか?
aguri> 
aguri> 同等の機能があっても、動作が少し異なる部分に関しては、
aguri> ケースバイケースで対応せざるを得ないと思います。
aguri> 
aguri> 完璧に調べていないので私も分からないのですが、
aguri> 現在の最新や、開発側のTODOも含めて
aguri> PL/pgSQL自体の機能強化があるのならそれに期待。
aguri> #実装上根本的に難しい?
aguri> 
aguri> 
aguri> On Wed, 19 Nov 2003 20:33:44 +0900
aguri> "BSI小尾" <n.obi @ bconsystems.co.jp> wrote:
aguri> n.obi> 今回、仕事でオラクルからPostgreSQLの移行を検討することになりました。
aguri> n.obi> しかしオラクルにはストアドが沢山あります。(1000以上)
aguri> n.obi> 本数も問題ですが、オラクル独特の機能の為に移行が大変そうです。
aguri> n.obi> 簡単な方法を教えて頂けないでしょうか。
aguri> 
aguri> <skip>
aguri> 
aguri> n.obi> 	上記のようにストアド内でデータを配列格納して編集しています。(ストアド内で
aguri> n.obi> 処理は完結しています。)
aguri> n.obi> 	このストアドを簡単に移行するにはどのように対応すれば宜しいのでしょうか。
aguri> n.obi> 	移行ですので、TEMPに置き換えたり、Cで対応しては検証テストがかかり、移
aguri> n.obi> 行メリットが無くなってしまいます。
aguri> n.obi> 
aguri> n.obi> 2.EXCEPTION
aguri> n.obi> 
aguri> n.obi> 	オラクルのストアド内ではEXCEPTIONが使用可能です。
aguri> n.obi> 
aguri> n.obi> 		EXCEPTION
aguri> n.obi> 		WHEN OTHERS THEN
aguri> n.obi> 			ログテーブルのエラー情報出力
aguri> n.obi> 		END;
aguri> n.obi> 
aguri> n.obi> 		EXCEPTION処理はキーの重複やデータ無し以外の予期しない障害の為に記述され
aguri> n.obi> ています。
aguri> n.obi>                         処理上手の抜いて記述しているのではなく、テーブル領域
aguri> n.obi> やメモリー等の問題で発生するエラー情報を
aguri> n.obi> 		取得する為に全てのストアドに記述されています。
aguri> n.obi> 
aguri> n.obi> 	このストアドを簡単に移行するにはどのように対応すれば宜しいのでしょうか。
aguri> n.obi>             障害が発生してからの対応時間を早くする為にあるので、無くすことは
aguri> n.obi> できません。
aguri> n.obi> 	また、修正が大変ですと移行メリットが無くなってしまうので、簡単な方法をおし
aguri> n.obi> ていただけないでしょうか。
aguri> 
aguri> -- 
aguri> 中山 賢一  aguri @ ssl.fujitsu.com   『信頼と技術で応える SSL』
aguri> 株式会社富士通ソーシアルサイエンスラボラトリ (富士通SSL)
aguri> 第二事業本部 ビジネス基盤センター 企画部  [Corp-Web] http://www.ssl.fujitsu.com
aguri> TEL: 044-739-1561(内線:3612)  FAX: 044-739-1548
aguri> 

-- 
中山 賢一  aguri @ ssl.fujitsu.com   『信頼と技術で応える SSL』
株式会社富士通ソーシアルサイエンスラボラトリ (富士通SSL)
第二事業本部 ビジネス基盤センター 企画部  [Corp-Web] http://www.ssl.fujitsu.com
TEL: 044-739-1561(内線:3612)  FAX: 044-739-1548




pgsql-jp メーリングリストの案内