DFU, Query, SQL

42. ストアド・プロシージャーはどこに ?

これまでにいくつかストアド・プロシージャーを作成する方法を紹介したが
ストアド・プロシージャーという種類のオブジェクトが存在しているわけではない。
オブジェクト・タイプとして *PROC とかいうのは存在していないのである。
また DSPPGMDSPOBJD でストアド・プロシージャーを見てもそのオブジェクトが
ストアド・プロシージャーであることを示す兆候も何もない。
それではストアド・プロシージャーであることをどのようにして知ればよいか ?
あるいはストアド・プロシージャーの一覧表を出力することはできないのだろうか ?
という疑問が残る。

IBM マニュアルには SQLProcedures という名前の APIで一覧を出力できるとあるが
説明が不十分なのでこのAPI は容易には使えない。
さてここからが IBM マニュアルにない話の紹介である。

対話式SQL で

select * from SYSIBM/SQLPROCEDURES

として実行すれば SQL ストアド・プロシージャーの一覧が表示される。
これは一体。どこからきているのだろうか ?
調べてみると

SYSIBM/SQLPROCS(論理ファイル)

にストアド・プロシージャーの名前などの情報が登録されていることが判明した。
そしてこの論理ファイルの実体は

QSYS2/SYSROUTINE(物理ファイル)

であることも判明した。
つまりこれらのファイルを読めばストアド・プロシージャーの登録/一覧表を取得することができる。
ただし登録されている一覧は実際には物理的に存在していないものまであるので
一覧として出力する前には CHKOBJ で確かめておく必要があるだろう。
ライブラリー SYSIBM には SQL情報がいろいろと保管されているようである。

SYSIBM という奇妙な名前のライブラリーの正体も少し判明したように思える。