Micro Focus Visual COBOL 2.2J for Windows Pro*COBOL による Oracle データベース 12.1c アクセス 動 作 検 証 検 証 結 果 報 告 書 2015 年 1 月 5 日 マイクロフォーカス 株 式 会 社 Copyright 2015 Micro Focus. All Rights Reserved. 記 載 の 会 社 名 製 品 名 は 各 社 の 商 標 または 登 録 商 標 です
1. 検 証 概 要 目 的 及 びテスト 方 法 1.1 検 証 概 要 Oracle データベースクライアントは COBOL アプリケーションから Oracle データベ ースにアクセスするためのプログラミングツールとして Pro*COBOL というプリコンパ イラを 搭 載 しています 本 ツールを 利 用 しますと COBOL プログラマは SQL 文 を 埋 め 込 み 形 式 でプログラムソース 中 に 記 述 できます Pro*COBOL プリコンパイラは COBOL プログラム 中 に 埋 め 込 まれた SQL 文 を 標 準 の Oracle ランタイム ライブラリ コール に 変 換 します この Pro*COBOL によるプリコンパイル 処 理 は Micro Focus の COBOL コンパイラを 含 めた 各 種 COBOL コンパイラで 翻 訳 可 能 な COBOL プログラムを 生 成 します Windows 版 の Pro*COBOL は 本 稿 執 筆 時 点 の 段 階 にて Visual COBOL より1つ 前 の 世 代 の Micro Focus COBOL 開 発 環 境 製 品 シリーズ Micro Focus Net Express5.1 をサ ポートするとマニュアルに 明 記 しています [Oracle Database クイック インストレーション ガイド 12c リリース 1 (12.1) for Microsoft Windows x64 (64-Bit)] https//docs.oracle.com/cd/e49329_01/install.121/e48235/toc.htm#bgbeebad (2015 年 1 月 5 日 リンク 確 認 ) しかしながら Pro*COBOL によってプリコンパイルされた COBOL プログラムは 極 めて 標 準 的 な COBOL 文 法 に 準 拠 したものであり 特 定 のコンパイラバージョンに 依 存 する 要 因 は 考 えられません 更 に Visual COBOL は 稼 働 保 証 環 境 として 指 定 された 製 品 Net Express 5.1 の 後 継 製 品 にあたるものであり コンパイラ 機 能 については 上 位 互 換 を 保 証 しています このため Net Express 5.1 向 けに 展 開 されるプリコンパイル 後 の COBOL ソースはそのまま Visual COBOL でも 稼 働 します 本 稿 では Pro*COBOL よりプリコンパイル 生 成 された COBOL プログラムを Visual COBOL でコンパイルし Oracle データベースへアクセスできることを 動 作 検 証 しまし た また Visual COBOL に 装 備 された COBSQL 統 合 プロセッサを 利 用 し Pro*COBOL によるプリコンパイル Visual COBOL によるコンパイルをワンステップで 処 理 できるこ とも 検 証 しました 1.2 目 的 及 びテスト 方 法 Micro Focus Visual COBOL は Pro*COBOL が 稼 働 保 証 対 象 とする Net Express 5.1 のコンパイラ 機 能 に 対 して 下 位 互 換 を 持 つ 最 新 鋭 の COBOL 言 語 開 発 実 行 環 境 製 品 で す Oracle は Pro*COBOL 用 のサンプルプログラムを 提 供 しています 本 検 証 ではまず 1 / 17
それを 使 って Pro*COBOL と Visual COBOL の 連 携 により 生 成 されたモジュールが 正 常 に Oracle データベースへアクセスし データ 操 作 をできることを 検 証 しました Visual COBOL はコンパイル 処 理 を 発 行 する 前 に Oracle, Sybase, Informix のプリコン パイラを 内 部 的 に 呼 び 出 し ワンステップでプリコンパイル 及 びコンパイルを 処 理 する COBSQL 統 合 プロセッサを 備 えます Oracle の 場 合 であれば Pro*COBOL を 利 用 し ます 本 機 能 を 利 用 すれば プリコンパイル 後 の 埋 め 込 み SQL 文 をライブラリコールに 置 き 換 えた COBOL ソースではなく 実 際 にプログラマがメンテナンスする 埋 め 込 み SQL 文 が 入 ったままのロジカルなソースを 使 って 管 理 できます 更 に Visual Studio 2010, Visual Studio 2012, Visual Studio 2013, Eclipse の IDE に COBOL 開 発 用 に 作 りこんだ Visual COBOL のエディタやデバッガでその 埋 め 込 み SQL 文 が 入 ったソース を 扱 うことができるため 開 発 作 業 の 生 産 性 を 著 しく 高 めることができます 本 稿 では Pro*COBOL の 検 証 に 使 用 した 埋 め 込 み SQL 文 が 入 ったままの 状 態 のサンプルプログ ラムを 使 って Visual Studio 2013 IDE 上 で COBSQL を 利 用 した 開 発 ができることも 検 証 確 認 しました 2. 検 証 環 境 Database サーバ ソフトウェア Windows 8 Enterprise(VM のゲスト OS として 稼 働 ) Oracle Database 12c Release 1(12.1.0.1.0) for Microsoft Windows(x64) Enterprise Edition をインストール Database 作 成 時 に sample schema を 作 成 Oracle Database 12c Release 1 Examples(12.1.0.1.0) for Microsoft Windows(x64) ハードウェア 機 種 CPU Memory Dell OPTIPLEX7010 Intel Core i7-3770 3.40GHz 3.00 Gbyte memory(ゲスト OS に 割 り 当 てたサイズ) 2 / 17
Database クライアント ソフトウェア Windows 8.1 Pro (VM のゲスト OS として 稼 働 ) Oracle Database 12c Release 1 Client(12.1.0.1.0) for Microsoft Windows(32 bit) Micro Focus Visual COBOL 2.2J Update 2 Microsoft Visual Studio Professional 2013 Version 12.0.30501.00 Update 2 ハードウェア 機 種 CPU Memory Dell LATITUDE E6530 Intel Core i5-3360 2.80GHz 3.00 Gbyte memory(ゲスト OS に 割 り 当 てたサイズ) 3. テスト 内 容 Oracle Database Examples には Pro*COBOL 用 のサンプルプログラム 及 び Micro Focus 製 品 向 けのコンパイル ビルドスクリプトが 含 まれます 本 検 証 ではこのサンプル プログラムのうち SAMPLE4.pco として 提 供 されるプログラムを 利 用 しました このプ ログラムには DDL 文 DML 文 DCL 文 が 含 まれこれらの 基 本 的 な 動 作 をテストできる ようになっています 初 めの Pro*COBOL を 直 接 使 った 検 証 では Oracle より 提 供 され る 同 プログラム 及 びビルドスクリプトを 使 用 してコンパイル ビルドしました 続 く COBSQL を 通 じた 検 証 においては ビルドスクリプトの 内 容 に 合 わせてコンパイル 及 び ビルドの 命 令 を 構 成 しました ビルドスクリプトは 実 行 形 式 へビルドするよう 記 述 されて いますが Micro Focus オリジナルの 動 的 ロードモジュール 形 式.gnt へのビルドも 検 証 しています 4. 結 果 4.1 サンプルアプリケーションの 取 得 Database Server にインストールした Oracle Database 12c Release 1 Examples(12.1.0.1.0) for Microsoft Windows(x64) より 該 当 のサンプルプログラム 及 び ビルドスクリプトファイルを 取 得 しました 3 / 17
4.2 サンプルアプリケーションの 確 認 本 検 証 で 利 用 したサンプルアプリケーションには 以 下 のような 処 理 が 含 まれます 1 Oracle データベースに 接 続 2 CREATE TABLE 文 にてテスト 用 のテーブルを 作 成 3 サンプルスキーマに 含 まれる EMP テーブルよりデータを CURSOR FETCH で 取 得 4 取 得 したデータ 及 びプログラム 中 で 加 工 したデータを INSERT 文 にてテスト 用 のテ ーブルにデータ 充 填 5 社 員 番 号 の 入 力 を 促 すプロンプトを 出 力 6 入 力 された 社 員 番 号 をキーに SELECT INTO 文 を 発 行 7 取 得 したデータを 表 示 8 テスト 用 のテーブルを DROP 9 Oracle データベースとの 接 続 を 切 断 4.3 サンプルアプリケーションの 実 行 結 果 サンプルアプリケーションを 正 常 に 実 行 できることを 確 認 しました 詳 細 は 付 録 の 通 りと なります 5. テスト 結 果 及 び 考 察 Oracle が 提 供 するプリコンパイラ Pro*COBOL が 生 成 する COBOL プログラムを Visual COBOL を 使 って 正 常 にコンパイルできることを 確 認 しました 実 行 形 式 動 的 ロ ードモジュール 形 式 問 わずコンパイルしたアプリケーションが 正 常 に 動 作 することも 確 認 しています 同 アプリケーションが 正 常 に 処 理 されたことにより 代 表 的 な DDL 文 DML 文 DCL 文 を Pro*COBOL と Visual COBOL の 組 み 合 わせで 問 題 なく 扱 えることが 検 証 できました また COBSQL を 使 ってシングルステップで 同 アプリケーションを 開 発 し 埋 め 込 み SQL 文 が 入 ったままのソースで 管 理 できることも 確 認 しました つまりこのプ リコンパイル 前 のソースに 対 して Visual COBOL が COBOL 開 発 用 に Visual Studio IDE に 作 りこんだ 開 発 補 助 機 能 を 駆 使 して 効 率 的 に Oracle データベースと 連 携 する COBOL アプリケーションの 開 発 ができることを 確 認 できています 以 上 4 / 17
付 録 1. Windows Pro*COBOL 1) プログラムの 先 頭 行 にてコンパイラオプションを 上 書 き E\work\WhitePaper\procob\cmd>more sample4.pco $SET CURRENCY-SIGN(36) 追 加 したコンパイ ラ 指 令 *************** * Sample Program 4 Datatype Equivalencing * * * * This program simulates the storage and retrieval of bitmap * * images into table IMAGE, which is created in the SCOTT * E\work\WhitePaper\procob\cmd> 日 本 語 ロケール 配 下 でコンパイルする 場 合 CURRECNY-SIGN コンパイラオプショ ンにはデフォルトでは (92 X'5C')が 指 定 されます Oracle から 提 供 されるサン プルプログラムでは 通 貨 記 号 に $ (36 X'24')を 使 用 しているため コンパイラに $ を 通 貨 記 号 として 認 識 させてあげるべくオプションを 上 書 きます 2) プログラム 中 の 接 続 処 理 部 分 を 検 証 環 境 に 合 わせて 書 き 換 え 編 集 前 E\work\WhitePaper\procob\cmd>more sample4.pco 01 USERNAME PIC X(10) VARYING. 01 PASSWD PIC X(10) VARYING. MOVE "scott" TO USERNAME-ARR. MOVE 5 TO USERNAME-LEN. MOVE "tiger" TO PASSWD-ARR. MOVE 5 TO PASSWD-LEN. EXEC SQL CONNECT USERNAME IDENTIFIED BY PASSWD END-EXEC. E\work\WhitePaper\procob\cmd> 編 集 後 E\work\WhitePaper\procob\cmd>more sample4.pco 01 CONNSTR PIC X(20) VARYING. MOVE "scott/tiger@orcl" TO CONNSTR-ARR. MOVE 16 TO CONNSTR-LEN. EXEC SQL 5 / 17
CONNECT CONNSTR END-EXEC. E\work\WhitePaper\procob\cmd> 3) Pro*COBOL のサンプル 中 含 まれるバッチファイル makeit.bat 中 の 97 行 目 及 び 105 行 目 をクライアント 環 境 に 合 わせたパスに 変 更 E\work\WhitePaper\procob\cmd>type makeit.bat cbllink %pcofile% /M%pcofile% %ORACLE_HOME%\precomp\lib\%SQLLIB_lib% cbllink %pcofile% /M%pcofile% %ORACLE_HOME%\precomp\lib\%SQLLIB_lib% E\work\WhitePaper\procob\cmd> 4) 3) で 編 集 した makeit.bat 使 って サンプルプログラムをプリコンパイル 及 びコンパ イル E\work\WhitePaper\procob\cmd>makeit SAMPLE4 E\work\WhitePaper\procob\cmd>procob iname=sample4.pco ireclen=132 Pro*COBOL Release 12.1.0.1.0 - Production on 木 12 月 18 152253 2014 1 Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved. システムのデフォルト オプション 値 C\app\client\tarot\product\12.1.0\client_1\ precomp\admin\pcbcfg.cfg E\work\WhitePaper\procob\cmd>echo Compiling SAMPLE4... Compiling SAMPLE4... 2 E\work\WhitePaper\procob\cmd>cobol SAMPLE4 /anim /litlink /ibmcomp /NESTCALL ma kesyn "COMP-5" = "COMP"; Micro Focus COBOL Version 2.2.02166 Copyright (C) Micro Focus 1984-2014. All rights reserved. * 無 視 - NESTCALL * チェック 終 了 エラーはありません- コード 生 成 を 開 始 します * Generating SAMPLE4 * Data 10064 Code 6392 Literals 2408 6 / 17
E\work\WhitePaper\procob\cmd>cbllink SAMPLE4 /MSAMPLE4 C\app\client\tarot\product\12.1.0\client_1\precomp\lib\orasql12.lib Micro Focus COBOL - CBLLINK utility Version 2.2.2.41 Copyright (C) Micro Focus 1984-2014. All rights reserved. 3 Microsoft (R) Incremental Linker Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. SAMPLE4.obj cbllds00000cb0.obj Creating library SAMPLE4.lib and object SAMPLE4.exp Microsoft (R) Manifest Tool version 5.2.3790.2076 Copyright (c) Microsoft Corporation 2005. All rights reserved. E\work\WhitePaper\procob\cmd> 1 Pro*COBOL によるプリコンパイル sample4.pco から sample4.cbl を 生 成 2 Visual COBOL のコマンドを 使 って sample4.cbl をコンパイル 3 Visual COBOL のコマンドを 使 って 生 成 されたオブジェクトをビルド 5) s5 スイッチの 有 効 化 E\work\WhitePaper\procob\cmd>set COBSW=/s5 E\work\WhitePaper\procob\cmd> 6) プログラムを 実 行 E\work\WhitePaper\procob\cmd>SAMPLE4.exe CONNECTED TO ORACLE VIA STMT scott/tiger@orcl OK TO DROP THE IMAGE TABLE? (Y/N) Y TABLE IMAGE DOES NOT EXIST - CREATING NEW TABLE. INSERTING BITMAPS INTO IMAGE FOR ALL EMPLOYEES... EMPLOYEE SMITH EMPLOYEE ALLEN EMPLOYEE WARD EMPLOYEE JONES EMPLOYEE MARTIN EMPLOYEE BLAKE EMPLOYEE CLARK EMPLOYEE KING EMPLOYEE TURNER EMPLOYEE JAMES EMPLOYEE FORD EMPLOYEE MILLER 7 / 17
DONE INSERTING BITMAPS. NEXT, LET'S DISPLAY SOME. ENTER EMPLOYEE NUMBER (0 TO QUIT) 7654 EMPLOYEE MARTIN HAS SALARY $ 1250.00 AND COMMISSION $ 1400.00. ENTER EMPLOYEE NUMBER (0 TO QUIT) 7900 EMPLOYEE JAMES HAS SALARY $ 950.00 AND NO COMMISSION. ENTER EMPLOYEE NUMBER (0 TO QUIT) 0 HAVE A GOOD DAY. E\work\WhitePaper\procob\cmd> 全 て 正 常 に 処 理 できていることが 確 認 できます 8 / 17
付 録 2. Windows COBSQL( 実 行 形 式 へのビルド) 1) Visual Studio 2013 を 起 動 2) [ファイル(F)]メニュー > [ 新 規 作 成 (N)] > [プロジェクト(P)] から [テンプレート] > [COBOL プロジェクト] > [Native] を 選 択 し コンソールアプリケ ーション を 作 成 3) 自 動 で 生 成 されるテンプレートプログラム Program1.cbl をソリューションエクスプ ローラにて 右 クリックの 上 削 除 4) 作 成 したプロジェクトを 右 クリックし [ 追 加 (D)] > [ 既 存 の 項 目 (G)] を 選 択 し 付 録 1 で 使 用 した sample4.pco をプロジェクトにインポート インポート 後 の 画 面 プリコンパイル 前 のソースを COBOL プログラムとして 解 釈 しています 9 / 17
5) ソリューションエクスプローラにて [Properties] をダブルクリック 6) [アプリケーション]ページにてエントリポイントを 指 定 7) [COBOL]ページにて Oracle が 提 供 するバッチファイル makeit.bat に 記 載 された コンパイラオプション 及 び COBSQL を 有 効 にする 旨 のオプションを [ 追 加 指 令 ] 欄 に 指 定 1 2 P(cobsql) 以 降 の 指 定 が COBSQL 用 の 指 令 となりま す ここでは ORACLE 8 以 降 の Pro*COBOL 向 けに 処 理 す るよう 指 示 しています 1 ビルド 設 定 欄 で 表 示 されているように ANIM 指 令 に 相 当 する 命 令 は 同 ページ 中 の 設 定 項 目 デバッグ 用 にコンパイル で 既 に 有 効 となっているため ここでは 割 愛 しています 2 NESTCALL 指 令 は Server Express のあるバージョンで 廃 止 された 指 令 であり ここ での 指 定 の 有 無 は 挙 動 に 影 響 を 与 えません 10 / 17
8) [COBOL リンク] ページにおける [リンクする LIB] 欄 にて makeit.bat に 倣 い Oracle が 提 供 するライブラリ orasql12.lib をリンクイン 指 定 3 9) [ビルド(B)]メニュー > [ソリューションのリビルド(R)] を 選 択 し プログラムをビル ド 下 図 のように 正 常 にビルドされたことを 確 認 3 付 録 1でプリコンパイル 展 開 されたソース SAMPLE4.cbl を 確 認 すると SQLADR SQLBEX 等 をはじめとした Oracle API への CALL 文 が 多 数 追 加 されているのがわか ります 実 行 形 式 やダイナミックリンクライブラリへビルドする 際 は 本 ステップで 指 定 し たライブラリを 静 的 リンクしてこれらの API への 参 照 を 解 決 させます 11 / 17
10) [デバッグ(D)] メニュー > [ステップオーバー(O)] を 選 択 し ステップ 実 行 を 開 始 埋 め 込 み SQL 文 が 入 ったプリ コンパイル 前 のソースに 対 して ステップ 単 位 に 処 理 を 進 めてデ バッグ 実 行 できます ブレークポイントを 指 定 して 任 意 の 位 置 まで 自 動 で 処 理 を 進 めることができます ブレークする 条 件 を 変 数 を 使 って 指 定 したり 通 過 数 によって 制 御 する 等 ブレーク 条 件 をより 細 かく 制 御 す ることも 可 能 です 12 / 17
ホスト 変 数 であって もソース 上 で 格 納 値 を 確 認 できます 任 意 のホスト 変 数 をウォッチ 式 に 追 加 して 格 納 値 の 変 化 をモニタす ることも 可 能 です 16 進 表 示 にすることも 可 能 です 処 理 を 最 後 まで 進 めると 付 録 1 と 同 様 の 結 果 が 得 られ COBSQL を 使 った 場 合 であっ ても 正 常 に 処 理 できていること が 確 認 できます 13 / 17
付 録 3. Windows COBSQL( 動 的 ロードモジュールへのビルド) 1) 付 録 2で 用 意 した Visual Studio 2013 のソリューションを 起 動 2) ソリューションを 右 クリックし [ 追 加 ] > [ 新 しいプロジェクト] から Native のコンソールアプリケーションを 追 加 追 加 したプロジェクト 3) プロジェクトテンプレートに 含 まれる Program1.cbl を 削 除 4) SAMPLE4.pco を 付 録 2で 使 用 したプロジェクトからコピー ソリューションエクスプローラ 上 のコピー&ペーストの 操 作 で コピー 移 動 できます 5) ソリューションエクスプローラにて [Properties] をダブルクリック 6) [アプリケーション]ページにおける [ 出 力 の 種 類 ] 欄 にて [INT/GNT] を 指 定 14 / 17
7) [COBOL] ページにて GNT にコンパイルをチェック 8) [ 追 加 指 令 ] 欄 に 付 録 2で 追 加 したものと 同 じ 指 令 を 指 定 9) [ 追 加 指 令 ] 欄 に INITCALL(ORASQL12) を 追 加 4 4 付 録 2で 実 行 形 式 へビルドした 際 は SQLADR SQLBEX 等 の 参 照 を orasql12.lib を 静 的 リンクし 解 決 させました 動 的 ロードの 場 合 はライブラリを 静 的 リンクするのではな く %ORACLE_HOME% bin orasql12.dll をプログラム 実 行 前 にロードして 以 降 の Oracle API への 参 照 を 解 決 させるよう 本 ステップでは 指 定 しています 付 録 1でプリコンパイルされた SAMPLE4.cbl を 見 ると CONNECT 文 の 箇 所 で * EXEC SQL * CONNECT CONNSTR * END-EXEC. CALL "ORASQL8" のように ORASQL8 を CALL しています Oracle 12c クライアントをインストールす ると orasql12.dll に 加 え orasql8.dll もインストールされます しかし 今 回 の 検 証 で はこの orasql8.dll のロードだけでは Oracle API への 参 照 を 解 決 できず orasql12.dll を 使 用 する 必 要 があることがわかりました そのため 実 行 時 に 最 初 に 実 行 される SQL 文 が CONNECT であることを 確 認 できている 場 合 は orasql12.dll を orasql8.dll にリ ネームして 使 っても 理 論 上 は INITCALL(ORASQL12) と 同 じ 挙 動 が 得 られます 15 / 17
10) [ビルド(B)]メニュー > [ソリューションのリビルド(R)] を 選 択 し プログラムをビル ド 下 図 のように 正 常 にビルドされたことを 確 認 11) ソリューションエクスプローラにて 動 的 ロードモジュール 開 発 用 に 追 加 したプロジェ クトを 右 クリックして [スタートアップ プロジェクトに 設 定 ] を 選 択 16 / 17
12) 付 録 2と 同 じ 要 領 でデバッグ 実 行 ができることを 確 認 デバッグ 実 行 イメージ 以 上 17 / 17