次の EXECSQL 文は、REXX SQLDA を必要とします。
CALL … USING DESCRIPTOR descriptor-name
DESCRIBE statement-name INTO descriptor-name
DESCRIBE INPUT statement-name INTO descriptor-name
EXECUTE … USING DESCRIPTOR descriptor-name
FETCH … USING DESCRIPTOR descriptor-name
OPEN … USING DESCRIPTOR descriptor-name
PREPARE … INTO descriptor-name
REXX プロシージャでは複数の SQLDA を使用できます。SQLDA 名は、共通の語幹を持つ REXX 変数のセットで構成されています。この語幹は、ピリオドを含まない REXX 変数名でなければならず、EXECSQL 文で使用される descriptor-name の値と同じです。次の例では、語幹名は INSQLDA です。
ADDRESS DSNREXX "EXECSQL DESCRIBE INPUT S2 INTO :INSQLDA " IF SQLCODE \= "0" THEN DO SAY "DESCRIBE INPUT FAILED " CALL DBERROR END INSQLDA.1.SQLDATA = HV1 INSQLDA.1.SQLIND = 0 /* Input variable is not null */ INSQLDA.2.SQLDATA = HV2 INSQLDA.2.SQLIND = 0 /* Input variable is not null */ INSQLDA.3.SQLDATA = HV3 INSQLDA.3.SQLIND = 0 /* Input variable is not null */ INSQLDA.4.SQLDATA = HV4 INSQLDA.4.SQLIND = 0 /* Input variable is not null */
DB2 LUW で使用する場合、SQLDA は次のフィールドで構成されます。
各 SQLDA には、次の REXX 変数の stem.SQLD が含まれています。この変数のセットは、他の言語の SQLDA の SQLVAR 構造体と同等ですが、REXX に固有の変数がいくつか含まれています。SQLDA の SQLVAR 構造体の出現回数は、1<=n<=stem.SQLD に相当します。
stem.n.SQLTYPE | 列のデータ型。 | |
stem.n.SQLLEN | DECIMAL および NUMERIC 以外の列の長さ。 | |
stem.n.SQLLEN.SQLPRECISION | DECIMAL または NUMERIC の列の精度。 | |
stem.n.SQLLEN.SQLSCALE | DECIMAL または NUMERIC の列の位取り。 | |
stem.n.SQLCCSID | 文字列の列の CCSID。 | 未サポート |
stem.n.SQLUSECCSID | SQLDATA の新しい CCSID。 | 未サポート |
stem.n.SQLLOCATOR | プロシージャの結果セット ロケーター。 | 未サポート |
stem.n.SQLDATA | 入力ホスト変数または出力ホスト変数の値 (使用されている文によって決まる)。 | |
stem.n.SQLIND | Null インジケーター。SQLDATA が NULL でない場合は 0、列が NULL の場合または NULL に設定される場合は -1。 | |
stem.n.SQLNAME | 列の名前。 |