SQL ルーチンのデバッグ

CREATE PROCEDURE、CREATE FUNCTION、または CREATE TRIGGER ステートメントに、SET OPTION DBGVIEW = *SOURCE を指定することにより、生成されたプログラムまたはモジュールを SQL ステートメント・レベルでデバッグすることができます。

RUNSQLSTM コマンドのパラメーターとして DBGVIEW(*SOURCE) を指定することもできます。 DBGVIEW(*SOURCE) は、RUNSQLSTM の中のすべてのルーチンに適用されます。

ソース・ビューは、システムが、ユーザーのオリジナルのルーチン本体を元にして ルーチン・ライブラリーにあるソース・ファイル QSQDSRC に作成します。 ライブラリーを判別できない場合、QSQDSRC は QTEMP に作成されます。 ソース・ビューは、プログラムまたはサービス・プログラムと一緒に保管はされません。 ソース視点は、ユーザーがデバッグで停止できる場所に対応する行へと分割されます。 テキスト (パラメーター名および変数名を含む) は、大文字に変換されます。 区切り文字で区切られている名前および文字リテラルは大文字に変換されません。

SQL オブジェクト・プロセッサー・ルート・ビューを使用して、デバッグで SQL ルーチンをステップスルーできます。各ステップ命令により、生成された基盤の C ステートメントではなく、次の SQL ステートメントに移動します。これにより、ルーチン・ロジックのフローを辿るのが容易になります。

SQL オブジェクト・プロセッサー・ルート・ビューまたは ILE C リスト・ビューのいずれかを使用して、SQL ルーチンをデバッグできます。生成されたプログラムまたはサービス・プログラム中の SQL 変数と C 変数の両方をデバッガーを使用して評価できます。優先される手法は SQL オブジェクト・プロセッサー・ルート・ビューを使用してデバッグすることですが、実行に関する追加情報を取得するために必要に応じて ILE C リスト・ビューを使用できます。

SQL オブジェクト・プロセッサー・ルート・ビュー

このビューは QSQDSRC 内のルーチン・ソースを使用します。SQL 変数を評価するには、接頭部 '%%' を変数名に付加して、その名前が SQL 変数を表していることを示します。 どの SQL 変数でも、デバッガー・コマンドで参照されるときには接頭部 '%%' が付いていなければなりません。SQL 変数名には大/小文字の区別はありません。区切り文字で区切られた識別子と区切り文字で区切られていない識別子の両方が参照可能です。SQL 変数名が指定されている場合、 デバッガーはその SQL 変数を表すのはどの C 変数なのかを判別し、対応するその C 変数の名前と内容を表示します。指標を持つ SQL パラメーターまたは変数が参照されている場合、デバッガーは指標がヌル値に設定されていれば「NULL」を返します。

変数名はあいまいさがなければ修飾する必要はありません。あいまいさがある場合は、変数を包含する複合 SQL ブロックのラベルで変数を修飾してあいまいさを回避する必要があります。 SQL オブジェクト・プロセッサー・ビューでデバッグ中に C 変数を参照できます。接頭部 '%%' が付いていない変数名は C 変数であると見なされます。

ILE C リスト・ビュー

このビューは、SQL ルーチンに対して生成された C ソースを使用します。

すべての変数およびパラメーターは、構造の一部として生成されます。 デバッグで変数を評価するときは、構造名を使用する必要があります。 変数は、現行ラベル名で修飾されます。 パラメーターは、プロシージャーまたは関数で修飾されます。 トリガー内の遷移変数は、該当する相関名で修飾されます。 それぞれの複合ステートメントまたは FOR ステートメントごとにラベル名を指定することを強くお勧めします。 ラベル名を指定しなければ、システムが代わってそれを生成します。 こうなると、変数を評価することはほとんど不可能になります。 すべての変数およびパラメーターは大文字の名前として評価されなければならないことにご注意ください。 構造の名前を評価することもできます。 こうすると、構造内のすべての変数が示されます。 変数またはパラメーターがヌル可能である場合、 構造内のその変数またはパラメーターの直後に対応する標識が続きます。

SQL ルーチンは C で生成されるため、C での規則の一部が SQL ソースのデバッグに影響します。SQL ルーチン本体に指定された、区切り文字で区切られた名前は C では指定できません。 そのような名前に対して名前が生成されるため、このことによってもデバッグや評価を行うことが難しくなります。文字変数の内容を評価するには、変数の名前の前に * を指定します。

システムは、変数名およびパラメーター名のほとんどに対して標識を生成するため、ある変数が SQL ヌル値であるかどうかを知るのに直接の検査方法はありません。 変数を評価すると、たとえ標識はヌル値を示すようにセットされている場合でも、必ずある値が表示されます。

ILE C ビューでのデバッグ中、SQL 変数を ('%%' 接頭部を使用して) 直接参照することはできません。

ハンドラーが呼び出されているかを判別するために、ハンドラーの中の最初のステートメントにブレークポイントを設定します。 ハンドラーの中の複合ステートメントまたは FOR ステートメントで宣言されている変数は、評価することができます。

SQL 配列のデバッグ

SQL 配列データ・タイプは、SQL プロシージャーおよび SQL 関数でのみサポートされます。 生成された C プログラム内には配列変数の永続ストレージがないため、このデータ・タイプには特殊なデバッグ規則があります。C 配列とは異なり、SQL 配列は 1 ベースです。 配列の 5 番目の要素を表示するには、EVAL コマンドに配列指標 5 を指定します (EVAL TSTARR.ABC[5])。 配列指標を指定せずに配列変数名を指定することはできません。 これを行うと、変数が見つからなかったことを示すエラーが出されます。 配列内のある範囲の値を参照するには、EVAL コマンドに配列指標の範囲を指定して使用できます。 例えば、配列内の最初の 25 個の要素を参照するには、EVAL TSTARR.ABC[1..25] とします。 EVAL コマンドは、配列変数が NULL 値を持つ場合にそれを示します。 NULL である配列変数への参照が含まれる式の評価は NULL になります。 数値配列型は、式の中で使用できます。他のタイプは式の中で使用できません。 プレフィックスのないストリング・タイプは、ポインターとしてではなくストリングとして表示されます。

すべてのデバッグ・コマンドが SQL 配列型をサポートしているわけではありません。 SQL 配列型を割り当ての左側で使用することはできません (EVAL TSTARR.ABC[5] = 3)。 それらを「&」アドレス演算子のターゲットとして使用することはできません (EVAL &TSTARR.ABC[3])。 配列を WATCH デバッグ・コマンドと一緒に使用することもできません。 配列変数は、デバッグ・シンボル表に含まれないため、EVAL %LOCALVARS コマンドで表示されません。