社内SEの徒然なる日記

NetCOBOLで複数のDBに接続したい! No3 SELECT文

■ 暗黙カーソル

前回(NetCOBOLで複数のDBに接続したい! No2 接続)はデータベースに接続する所まで書きました。今度は、実際にSQLを発行してみます。

最初に、1件検索(暗黙カーソルを使用したOPEN、FETCH、CLOSEまで一気に行う検索)の場合の記述方法です。

IDENTIFICATION                   DIVISION.
PROGRAM-ID. DBTEST00.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
*
WORKING-STORAGE SECTION.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 H-USERNAME PIC X(008).
01 H-PASSWD PIC X(008).
01 H-DBSTRING PIC X(003).
01 H-DBNAME PIC X(010).
*
* 商品名

01 H-ITEM-NAME PIC X(044).
*
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE SQLCA END-EXEC.
*
PROCEDURE DIVISION.
*
* Oracle接続文字列の設定

MOVE "user01" TO H-USERNAME.
MOVE "oracle" TO H-PASSWD.
MOVE "db1" TO H-DBSTRING.
MOVE "setu1" TO H-DBNAME.
*
* Oracle接続(DWH)

EXEC SQL
CONNECT :H-USERNAME IDENTIFIED BY :H-PASSWD
AT :H-DBNAME
USING :H-DBSTRING
END-EXEC.
*
* SQLCODEとメッセージを出力(エラー確認用)

DISPLAY "SQLCODE = "SQLCODE " [" SQLERRMC "]".
*
* SELECT文

EXEC SQL
AT :H-DBNAME
SELECT RTRIM("商品名")
INTO :H-ITEM-NAME
FROM "HST商品" A
WHERE "商品CD" = '087290'
END-EXEC.
*
* 抽出結果を表示

DISPLAY H-ITEM-NAME.
EXIT PROGRAM.


EXEC SQLの後にAT句で接続したデータベースを指定します。

■ 明示カーソル

今度は明示カーソルでOPEN、FETCH、CLOSEを実行します。
IDENTIFICATION                   DIVISION.
PROGRAM-ID. DBTEST00.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
*
WORKING-STORAGE SECTION.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 H-USERNAME PIC X(008).
01 H-PASSWD PIC X(008).
01 H-DBSTRING PIC X(003).
01 H-DBNAME PIC X(010).
*
* 商品名

01 H-ITEM-NAME PIC X(044).
*
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE SQLCA END-EXEC.
*
PROCEDURE DIVISION.
*
* Oracle接続文字列の設定

MOVE "user01" TO H-USERNAME.
MOVE "oracle" TO H-PASSWD.
MOVE "db1" TO H-DBSTRING.
MOVE "setu1" TO H-DBNAME.
*
* Oracle接続(DWH)

EXEC SQL
CONNECT :H-USERNAME IDENTIFIED BY :H-PASSWD
AT :H-DBNAME
USING :H-DBSTRING
END-EXEC.
*
* SQLCODEとメッセージを出力(エラー確認用)

DISPLAY "SQLCODE = "SQLCODE " [" SQLERRMC "]".
*
* SELECT文

EXEC SQL
AT :H-DBNAME DECLARE CU1 CURSOR FOR
SELECT RTRIM("商品名")
FROM "HST商品" A
WHERE "商品CD" = '087290'
END-EXEC.
*
* カーソルオープン

EXEC SQL
OPEN CU1
END-EXEC.
*
* フェッチ

EXEC SQL
FETCH CU1
INTO :H-ITEM-NAME
END-EXEC.
*
カーソルクローズ

EXEC SQL
CLOSE CU1
END-EXEC.
*
* 抽出結果を表示

DISPLAY H-ITEM-NAME.
EXIT PROGRAM.


明示カーソルの場合、AT句は最初のSELECT文を発行する箇所だけで良いようです。それに続くOPEN、FETCH、CLOSEは、指定しているカーソル名で用は足りるって事なんでしょうね。

■ 後書き

次回は、DML文(INSERT、UPDATE、DELETE)を発行してみます。

前回:NetCOBOLで複数のDBに接続したい! No2 接続
次回:NetCOBOLで複数のDBに接続したい! No4 DML文

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する