ushidayの日記

主に「IBMi」のメモに・・・

SQL-RPGをチョット勉強 その1

IBMDB2i(MySQL Strage Engine)のRedBookにあった、SQL-RPGをせっかくだから、チョット勉強してみました。
i5 O/S V5R4から、フリーフォーマットでも記述出来る様になっていて、以前のバージョンと比べると、だいぶスッキリしたようです。

SQL-RPGでのFetchの基本パターン
  1. カーソルの定義
  2. 定義したカーソルのオープン
  3. カーソルの読み取り
  4. カーソルのクローズ
SQL-RPGコンパイルしてみると...

SQL-RPGコンパイルしてみました。ちゃんとSQLの構文エラーをチェック(実装していないフィールドを使ったりするとエラーになったり)してくれるので、結構賢いなぁと思いました。エディタレベルでも結構チェックを入れてくれるので、実行時エラーで悩ませられるケースをだいぶ軽減してくれていると思います。
さて、SQLSTTなどの状況を示す、データ構造をソースに自前で記述しなくても、自動で記述されるとの解説だったので、「きっとコンパイル時に勝手に挿入されているのだろう」と思い、コンパイルリストを見てみました。
確かにステータスを表すデータ構造がリストにはあり、さらにSQLSTTなどの解りづらい、変数は”SQLSTATE”みたいにOverlayされていました。(V5R4からの様です)
コンパイルリストを眺めていると、「Exec SQL」の記述をしたソースが、「CAll xxxx」(xxxxの名前は忘れました)と引数にSQLの構造体をとって呼ばれているではありませんか!結局「Exec SQL〜」以下の内容は、実態が「Call xxxx」のラッパーだったいう事みたいです。でも毎回、外部Callしてたら、Native-RPGに比べて、レスポンス面でハンデにならないのかなぁ?

実際のソースは後日に。