Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

トップ  >  A−VX - A−VXのデータベース

A−VXのデータベース(5)

COBOLでのプログラミングの話を少しします。「私はプログラミングなんかしないよ」という人はここは読まずに先に進んでください。

1 COBOL85からA−VX RDBアクセス

Windows上からのアクセス方法は、最初に説明しました。
ここではA−VX上のCOBOLからA−VX RDBを使用する方法をさわりの部分を簡単に説明します。

A−VXのCOBOLからA−VX RDB上のデータを読み書きする方法として、
・SQL(埋め込みSQL)
・COBOL85 DML
の2種類があります。

この他に複数索引順編成ファイルとして直接データを読み書きする方法があります。

2 埋め込みSQL

世間のCOBOLでは一般的な埋め込みSQLですが、NECのオフコンではあまり使われないようです。

後述するCOBOL85 DMLを使ってのRDBアクセスが便利なことや、埋め込みSQLをコンパイルする為にはCOBOLコンパイラとは別にSQLプリコンパイラというものを買わなければならないことなどが原因だと思います。

あまり使われていない為に性能チューニングやトラブル時のノウハウなどがあまり蓄積されていない、ということもあるのかもしれません。(いままで説明してきたようにA−VX RDBは独特の部分があり、細かいところでオープン系のノウハウが使えるのかどうかわからない。単純にテストプログラムレベルの簡単なものを作って実行します程度なら同じだと思いますが、実際に運用レベルとして使おうと思うと今まで同じで済んでいたような細かい差が問題になるということは皆さんご存じだと思います。)

A−VXの埋め込みSQLも一般的なものと同じで「EXEC SQL」と「END−EXEC」でSQL文を囲むような形です。

EXEC SQL
     INSERT INTO JINJI (TNO,TNAME,TAGE)    
            VALUES (2000,YAMADA TARO,30)   
END-EXEC.


なおDML系のSQL文しか使えません。
A−VXの埋め込みSQLでは、CREATE TABLEとかDROP VIEWとかGRANTとかは使えないということです。そういうことは表定義保守のユーティリティ(#DDM)というものを使います。プログラム中でテーブルを作りたいような時はこの表定義保守のユーティリティを呼び出して使います。

3 COBOL85 DML

NECのオフコンでA−VX RDBにアクセスするときにはこっちのやり方のほうが一般的なようです。私自身はA−VXのCOBOLではこっちの方しか見たことがありません。

この方法はOPEN/CLOSEやREAD、WRITE、REWRITE、DELETEといった命令を使ってデータベースに対して読み書きを行います。
つまり基本表や仮想表(つまりテーブルやビュー)に対して、普通のファイルのようにアクセスすることができるということです。
基本表(テーブルのことね)を順編成ファイルのように順番にREAD/WRITEしていったり、相対編成ファイルや索引順編成ファイルのようにキーを使ってREAD/WRITEしていくことができます。READ 〜 AT END 〜とかWRITE 〜 INVALID KEY 〜なんて書き方ができます。

何がいいかというと、「普通のファイルのアクセスならノウハウが蓄積されているでしょう」とか、「このデータは普通のファイルに入っているからREAD/WRITE、これはデータベースだからSQLで」とか分けて考えなくていいとか、「このデータは順アクセスしかしないから順編成、このデータは検索するからこいつをキーにして・・」とかシステム設計時にファイル編成を考えなくてもいいとか、「ファイルからデータベースにシステム構成を変えてもファイル時代のプログラムがそのまま何の変更もなく使える」(このおかげで、年季の入ったプログラムが今だに現役で使えてたり・・・)とか、いろいろな理由があります。

普通のファイルにアクセスする命令だけで一通りのことができるので、普通の人はREAD/WRITEなどがあれば満足するのですが、中には「RDBなんだからREAD/WRITEだけだと嫌だ」という人もいます。そういう人の為にSELECT、SCRATCH、COMMIT、ROLLBACKといった命令が追加されています。
SELECT命令は、SQL文のSELECTとよく似た命令です。(使い方がなんとなく似ているということです。命令自体はSQL文のSELECT文とは異なります。)SELECT命令でレコードの集合を作っておいて、その集合の中でREAD/WRITEするようなイメージになります。

これらの命令をうまく使うとパフォーマンスが向上したり、トランザクション処理ができたり、といったことができるようになったりします。(うまく使わないとパフォーマンスが低下したり、うまく動かなくなったりということもありますが。)

最後に追加的な情報ですが、「COBOL実行環境指定」でロックした時の動きを変えることができます。

4 ファイルとして読み書き

複数索引順編成ファイルとして、オープンして、読み書きして、クローズする、普通のファイルとしてのアクセス方法です。

上の「COBOL85 DML」と何が違うのかですが、上のは基本表や仮想表をファイルとみなしてアクセスするのに対して、これはデータの入っている物理ファイルを直接アクセスする方法です。

理論的には、1つの基本表(物理ファイル)に対して上の3種類の方法混在で読み書きしても問題ありませんが、同時にアクセスしたときのロックがどうなるとか、いろいろと複雑な話が出てくると思うので、実際のところはどれか1つの方法で統一して読み書きするのがよさそうです。