Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU - |
目次 索引 |
第3章 アプリケーションの作成 | > 3.2 SQL埋込みCOBOLプログラムの作成方法 |
ここでは、拡張SQL文識別子を使用した動的SQL文の実行方法について説明します。
拡張SQL文識別子は、文字列型のホスト変数で指定し、アプリケーションの実行時に値を動的に設定します。
拡張SQL文識別子は、以下のSQL文に指定できます。
ALLOCATE CURSOR文
DEALLOCATE PREPARE文
DESCRIBE文
EXECUTE文
PREPARE文
拡張SQL文識別子を使用すると、ホスト変数を指定することにより被準備文の名前を実行時に動的に指定することが可能になるため、PREPARE文やEXECUTE文など、被準備文の名前を指定するSQL文をまとめることができます。
そのため、多数の被準備文を使用するアプリケーションでも、開発量の削減を実現できます。
拡張SQL識別子ではなくSQL文識別子を使用すると、被準備文の名前をSQL文中に識別子として文字列で指定するため、複数のSQL文を準備する場合は、準備するSQL文の数だけPREPARE文を記述する必要があります。
また、各被準備文を実行する場合は、個々のSQL文識別子ごとにEXECUTE文などのSQL文を記述しなければなりません。
そのため、多数の被準備文を使用するアプリケーションは、その開発規模が大きくなってしまいます。
拡張SQL文識別子を使用した場合とSQL文識別子を使用した場合で、複数の被準備文を実行する例を以下に示します。
例1
拡張SQL文識別子を使用した複数の被準備文を実行するアプリケーション
: 001010 PERFORM VARYING LOOP FROM 1 BY 1 UNTIL LOOP > nn 003010 EXEC SQL PREPARE :cmd FROM :strsql END-EXEC. (1) 000000 END-PERFORM. : 001010 PERFORM VARYING LOOP FROM 1 BY 1 UNTIL LOOP > nn 003010 EXEC SQL EXECUTE :cmd END-EXEC. (2) 000000 END-PERFORM. :(1)拡張SQL文識別子を使用して、ループによりnn個の準備可能文を準備します。
(2)拡張SQL文識別子を使用して、ループによりnn個の被準備文を実行します。
例2
SQL文識別子を使用した複数の被準備文を実行するアプリケーション
: 001000 EXEC SQL PREPARE CMD1 FROM :strsql END-EXEC. (1) 001010 EXEC SQL PREPARE CMD2 FROM :strsql END-EXEC. (1) 001020 EXEC SQL PREPARE CMD3 FROM :strsql END-EXEC. (1) : : 001100 EXEC SQL PREPARE CMDnn FROM :strsql END-EXEC. (1) : 002010 EXEC SQL EXECUTE CMD1 END-EXEC. (2) 002020 EXEC SQL EXECUTE CMD2 END-EXEC. (2) 002030 EXEC SQL EXECUTE CMD3 END-EXEC. (2) : : 003010 EXEC SQL EXECUTE CMDnn END-EXEC. (2) :(1)SQL文識別子CMD1〜CMDnnまでに対応するSQL文を準備します。
(2)SQL文識別子CMD1〜CMDnnまでに対応する被準備文を実行します。
拡張SQL文識別子の有効範囲はセションになります。そのため複数のコンパイル単位にまたがって使用することができ、拡張SQL文識別子を使用するSQL文ごとにカプセル化し、共有することが可能です。
例
複数のコンパイル単位にまたがって拡張SQL文識別子を使用するアプリケーションsub_pre.scob
000030 IDENTIFICATION DIVISION. 000040 PROGRAM-ID. SUB-PREP. : 001000 EXEC SQL PREPARE :cmd1 FROM :strsql END-EXEC. (1) : 010000 EXIT PROGRAM.(1)ホスト変数cmd1を使用して拡張SQL文識別子“CMD1”を定義します。
sub_exec.scob
000030 IDENTIFICATION DIVISION. 000040 PROGRAM-ID. SUB-EXEC. : 001000 EXEC SQL EXECUTE :cmd1 USING SQL DESCRIPTOR 'DESC1' END-EXEC. (1) : 010000 EXIT PROGRAM.(1)拡張SQL文識別子“CMD1”の被準備文を実行します。
目次 索引 |