以前からお世話になっているClub
DB2で、SQL/PSMの勉強会をさせていただきました。SQL/PSMはSQL標準(ISO/IEC
9075-4)の永続格納モジュール (Persistent Storage Module:
通常ストアドプロシージャと呼ばれる機能)規格です。OracleやSybase/MS SQL
Serverはそれぞれ独自の規格(PL/SQL,
T-SQL)で実装していますが、このSQL標準以降にストアドプロシージャやトリガを実装したデータベースでは、SQL/PSMを利用しています。
OSCでは昨年一年間MySQLを使ったSQL/PSMのセミナーを行ってきましたが、今回はそのDB2版になります。IBM DB2
UDB V8.2以降から手軽に使えるようになっています。
手元にDB2の環境がない方は、無償のIBM DB2 9.7 Expressを利用できます。
MySQLからSQL/PSMを利用する場合と違うのは以下の項目です。
(1) デリミタを変更する必要がない
IBM
DB2のコマンドラインツールはCLPといって、リターンがCLPへのデリミタとなります。そのため、mysqlコマンドラインツールのように、SQL/PSMの行終端記号;(セミコロン)がmysqlコマンドラインツールのデリミタとなることを防ぐために、デリミタの変更をする必要がありません。その代わり、行を継続するための¥が必要になります。
(2) バインドされていない(Unbound)値は使えない。
例えば、以下のようなストアドプロシジャはエラーになります。これは'Hello
SP'の出力先がバインドされていないためです。
CREATE PROCEDURE HelloSP() ¥
BEGIN ¥
SELECT ‘Hello SP’ FROM SYSIBM.SYSDUMMY1; ¥
END
上記をDB2のCLPから実行するためには、次のように定義します。
CREATE PROCEDURE HelloSP(out oVar varchar(10)) ¥
BEGIN ¥
SET oVar = ‘HelloSP’; ¥
END
そして、次のように実行します。
db2 => call HelloSP(?)
出力パラメーターの値
--------------------------
パラメーター名: OVAR
パラメーター値: HelloSP
リターン状況 = 0
IBM DB2でSQL/PSM(SQL
PL)を利用するには、勉強会でも参照しましたが、次のドキュメントが詳しいです。是非参照してSQL/PSMを利用してみてください。
DB2 UDB V8.2 SQLプロシージャー・ガイド
Feb
13
2010