アプリケーション開発の手引き

例: ファイルへのドキュメントの抽出

このプログラムの例は、 CLOB 要素がどのようにして表から外部ファイルへ取り出されるかを示しています。

LOBFILE プログラム例の作動方法

  1. ホスト変数を宣言する。 BEGIN DECLARE SECTION および END DECLARE SECTION ステートメントは、ホスト変数宣言を区切ります。ホスト変数には、SQL ステートメントで参照される際に、接頭部としてコロン (:) が付けられます。 CLOB FILE REFERENCE ホスト変数が宣言されます。
  2. CLOB FILE REFERENCE ホスト変数を設定する。 FILE REFERENCE の属性が設定されます。特に指定しない限り、完全に宣言されたパスを持たないファイル名が現行の作業ディレクトリーに配置されます。
  3. CLOB FILE REFERENCE ホスト変数への選択resume というフィールドからデータがホスト変数によって参照されるファイル名に対して選択されます。

CHECKERR マクロ / 関数は、プログラム外部にあるエラー検査ユーティリティーです。エラー検査ユーティリティーの所在は、ご使用のプログラム言語により異なります。

C
DB2 API を呼び出す C プログラムの場合、 utilapi.c 内の sqlInfoPrint 関数は、 utilapi.h 内の API_SQL_CHECK として再定義されます。 C 組み込み SQL プログラムの場合、 utilemb.sqc 内の sqlInfoPrint 関数は、 utilemb.h 内の EMB_SQL_CHECK として再定義されます。

COBOL
CHECKERRcheckerr.cbl という名前の外部プログラムです。

このエラー検査ユーティリティーのソース・コードについては、 プログラム例での GET ERROR MESSAGE の使用を参照してください。

C の例: LOBFILE.SQC

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sql.h>
#include "utilemb.h"
EXEC SQL INCLUDE SQLCA;
int main(int argc, char *argv[]) {
   EXEC SQL BEGIN DECLARE SECTION; (1)
      SQL TYPE IS CLOB_FILE resume;
      short lobind;
      char userid[9];
      char passwd[19];
   EXEC SQL END DECLARE SECTION;
   printf( "Sample C program: LOBFILE\n" );
   if (argc == 1) {
      EXEC SQL CONNECT TO sample;
	  EMB_SQL_CHECK("CONNECT TO SAMPLE");
   }
   else if (argc == 3) { 
      strcpy (userid, argv[1]);
      strcpy (passwd, argv[2]);
      EXEC SQL CONNECT TO sample USER :userid USING :passwd;
      EMB_SQL_CHECK("CONNECT TO SAMPLE");
   }
   else {
      printf ("\nUSAGE: lobfile [userid passwd]\n\n");
      return 1;
   } /* endif */
   
   strcpy (resume.name, "RESUME.TXT");  (2)
   resume.name_length = strlen("RESUME.TXT");
   resume.file_options = SQL_FILE_OVERWRITE;
   EXEC SQL SELECT resume INTO :resume :lobind FROM emp_resume  (3)
      WHERE resume_format='ascii' AND empno='000130';
   if (lobind < 0) {
      printf ("NULL LOB indicated \n");
   } else {
      printf ("Resume for EMPNO 000130 is in file : RESUME.TXT\n");
   } /* endif */
   EXEC SQL CONNECT RESET;
   EMB_SQL_CHECK("CONNECT RESET");
   return 0;
}
/* end of program : LOBFILE.SQC */

COBOL の例: LOBFILE.SQB

       Identification Division.
       Program-ID. "lobfile".
       Data Division.
       Working-Storage Section.
           copy "sqlenv.cbl".
           copy "sql.cbl".
           copy "sqlca.cbl".
           EXEC SQL BEGIN DECLARE SECTION END-EXEC.                     (1)
       01 userid            pic x(8).
       01 passwd.
         49 passwd-length   pic s9(4) comp-5 value 0.
         49 passwd-name     pic x(18).
       01 resume            USAGE IS SQL TYPE IS CLOB-FILE.
       01 lobind            pic s9(4) comp-5.
           EXEC SQL END DECLARE SECTION END-EXEC.
       77 errloc          pic x(80).
       Procedure Division.
       Main Section.
           display "Sample COBOL program: LOBFILE".
      * Get database connection information.
           display "Enter your user id (default none): " 
                with no advancing.
           accept userid.
           if userid = spaces
             EXEC SQL CONNECT TO sample END-EXEC
           else
             display "Enter your password : " with no advancing
             accept passwd-name.
      * Passwords in a CONNECT statement must be entered in a VARCHAR
      * format with the length of the input string.
           inspect passwd-name tallying passwd-length for characters
              before initial " ".
           EXEC SQL CONNECT TO sample USER :userid USING :passwd
               END-EXEC.
           move "CONNECT TO" to errloc.
           call "checkerr" using SQLCA errloc.
           move "RESUME.TXT" to resume-NAME.                            (2)
           move 10 to resume-NAME-LENGTH.
           move SQL-FILE-OVERWRITE to resume-FILE-OPTIONS.
           EXEC SQL SELECT resume INTO :resume :lobind                  (3)
                    FROM emp_resume
                    WHERE resume_format = 'ascii'
                    AND empno = '000130' END-EXEC.
           if lobind less than 0 go to NULL-LOB-indicated.
           display "Resume for EMPNO 000130 is in file : RESUME.TXT".
           go to End-Main.
       NULL-LOB-indicated.
           display "NULL LOB indicated".
       End-Main.
           EXEC SQL CONNECT RESET END-EXEC.
           move "CONNECT RESET" to errloc.
           call "checkerr" using SQLCA errloc.
       End-Prog.
                  stop run.


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]