ここでは、本製品で提供するサンプルプログラム-sample17-について説明します。sample17では、データベース(SQL)機能のより進んだ使い方として、データベースの複数の行を1つの埋込みSQL文で操作する例を示します。
データベースはサーバ上に存在し、クライアント側からこれにアクセスします。データベースのアクセスは、ODBCドライバを経由して行います。
ODBCドライバを使用するデータベースアクセスについては、“NetCOBOL ユーザーズガイド”の“リモートデータベースアクセス”を参照してください。
このプログラムを動作させるためには、以下の製品が必要です。
ODBCドライバマネージャ
ODBCドライバ
ODBCドライバの必要とする製品
データベース
データベースにODBCでアクセスするために必要な製品
sample17では、次に示すCOBOLの文を使っています。
CALL文
ACCEPT文
DISPLAY文
GO TO文
IF文
PERFORM文
sample17では、次に示す埋込みSQL文を使っています。
埋込み例外宣言
CONNECT文
カーソル宣言
OPEN文
FETCH文
SELECT文
DELETE文
UPDATE文
CLOSE文
COMMIT文
ROLLBACK文
DISCONNECT文
複数行指定ホスト変数
表指定ホスト変数
機能
sample16と同じデータベースにアクセスし、次の操作を行ってからデータベースとの接続を切断します。
データベース全データの表示
GOODSの値が“TELEVISION”である行のGNOの値の取り出し
取り出したGNOを持つ行のQOHの更新
GOODSの値が“RADIO”、“SHAVER”、“DRIVER”の行の削除
データベースの全データの再表示
プログラムを実行する前に
ODBCドライバを経由してサーバのデータベースへアクセスできる環境を構築しておいてください。SERVERNAME1というサーバ名で接続するサーバを設定し、そのサーバのデータベース上に“STOCK”という名前で表を作成しておいてください。
STOCK表は、以下の形式で作成してください。
列の名前 | 列の属性 |
---|---|
GNO | 2進整数、4桁 |
GOODS | 固定長文字、20バイト |
QOH | 2進整数、9桁 |
WHNO | 2進整数、4桁 |
STOCK表に次のデータを格納しておいてください。
GNO | GOODS | QOH | WHNO |
---|---|---|---|
110 111 123 124 137 138 140 141 200 201 212 215 226 227 240 243 351 380 390 | TELEVISION TELEVISION REFRIGERATOR REFRIGERATOR RADIO RADIO CASSETTE DECK CASSETTE DECK AIR CONDITIONER AIR CONDITIONER TELEVISION VIDEO REFRIGERATOR REFRIGERATOR CASSETTE DECK CASSETTE DECK CASSETTE TAPE SHAVER DRIER | 85 90 60 75 150 200 120 80 04 15 0 05 08 15 25 14 2500 870 540 | 2 2 1 1 2 2 2 2 1 1 2 2 1 1 2 2 2 3 3 |
ODBC情報テンプレート(/opt/FJSVcbl64/config/template/ja_JP.UTF-8/odbcinf)を利用してODBC情報ファイルを作成してください。ここではDBMSACS.INFとします。
実行方法
以下に、sample17の実行例を示します。
$ cobol -M -osample17 sample17.cob 最大重大度コードは I で,翻訳したプログラム数は 1 本です. $ ODBC_INF= DBMSACS.INF; export ODBC_INF $ ./sample17
以下の要求がACCEPT文によって、行われます。
ユーザID/パスワードを入力して下さい(ID/PASSWD):
要求に対し、ユーザIDとパスワードを斜線"/"で区切って入力してください。入力文字が
65バイト以下の場合、65バイトになるように空白を入力して下さい。
実行結果
表から取り出されるデータは、以下のように表示されます。
接続に成功しました 処理前のテーブルの内容 01件目のデータ: 製品番号 = +0110 製品名 = TELEVISION 在庫数量 = +000000085 倉庫番号 = +0002 : 19件目のデータ: 製品番号 = +0390 製品名 = DRIER 在庫数量 = +000000540 倉庫番号 = +0003 全データ件数は19件です 製品名がTELEVISIONの行の製品番号を取り出します。 以下の製品の在庫数量を10ずつ減少させます。 TELEVISION -> +0110 TELEVISION -> +0110 TELEVISION -> +0212 製品名が'RADIO'、'SHAVER'、'DRIER'の行を削除します 処理後のテーブルの内容 01件目のデータ: 製品番号 = +0110 製品名 = TELEVISION 在庫数量 = +000000065 倉庫番号 = +0002 : 15件目のデータ: 製品番号 = +0351 製品名 = CASSETTE TAPE 在庫数量 = +000002500 倉庫番号 = +0002 全データ件数は15件です 終了します $