DFU, Query, SQL

60. CREATE TABLEで物理ファイルを作成してみよう

RUNSQLの説明で SQL の CREATE TABLECRTPF と同じであると
説明したことがあるが、それでは CREATE TABLE はどのような場面で
必要になるのだろうか?

CREATE TABLE の機能はDDSソースを必要とせずにフィールド記述の
物理ファイルを作成することである。
つまり一時的な物理ファイルを動的に作成するのに向いている。
例えば一時的に QTEMPなどに作業ファイルを作成したいような場合である。
DDSを起こしてCRTPFで物理ファイルを作成するほどのものではない。
しかしやはりフィールド記述のある物理ファイルとしたいような場合である。

さてインタールットでも SQLの CREATE TABLE を紹介したり
解説している記事が多く見られるのだが
いずれも冗長すぎてわかりやすさからはほど遠いものとなっている。
ネットの解説は入門記事ほど難しく大げさに書かれている。
ここではササッとわかるように解説したい。

[SHOHIN :DDSソース]

0001.00      A**********************************************                          
0002.00      A*   SHOHIN  :  商品マスターファイル          *                          
0003.00      A**********************************************                          
0004.00      A                                      UNIQUE                            
0005.00      A          R SHOHINR                   TEXT(' 商品マスターレコード ')    
0006.00      A*                                                                       
0007.00      A            SHCODE        10A         COLHDG(' 商品コード ')            
0008.00      A            SHNAME        24O         COLHDG(' 商品名 ')                
0009.00      A            SHTANK         7S 0       COLHDG(' 単価 ')                  
0010.00      A                                      EDTCDE(1)                         
0011.00      A            SHSCOD         4A         COLHDG(' 品種コード ')            
0012.00      A*                                                                       
0013.00      A          K SHCODE                                                      

[解説]

このDDSソースと同じデータ・ベースを作成する CREATE TABLE は
次のとおり。


   CREATE TABLE QTRFIL/SHOHIN 
     (SHCODE CHAR(10) NOT NULL, SHNAME CHAR(10) FOR MIXED DATA NOT NULL,
        SHTANK NUMERIC(7, 0) NOT NULL, SHSCOD CHAR(4) NOT NULL)

[解説]

DDSが理解できる人は一目瞭然であろう。
キーの指定も必要な場合は

… PRIMARY KEY(SHCODE) を ( )内に追加すればよい。


   CREATE TABLE QTRFIL/SHOHIN 
     (SHCODE CHAR(10) NOT NULL, SHNAME CHAR(10) FOR MIXED DATA NOT NULL,
        SHTANK NUMERIC(7, 0) NOT NULL, SHSCOD CHAR(4) NOT NULL, 
     PRIMARY KEY(SHCODE))

各項目は NOT NULL を付加しておかないと NULL値の入力も許してしまうことになる。
オープン・フィールド(タイプ : 0)にも FOR MIXED DATA が必要である。
PACK形式の数字フィールドはDECIMAL(7, 0)のように表現をする。
上記の単価はZONE10進数であるので NUMERICと記述してある。

これくらい覚えてもらえば十分であるがネットの解説記事は長々とやさしい内容を
わかりにくい長い記事にしている。

ところでCREATE TABLEだけではフィールドの欄見出し(COLHDG)やテキストは与えられていない。
これも簡単なので次回に紹介する。

ここで紹介したCREATE TABLEは RUNSQLコマンドを使えば実行することができる。
RUNSQLコマンドは OS Ver7.1から使用可能。
それ以前のOSの方はこのサイトの Tools の RUNSQLコマンドを使用されたい。
RUNSQLSTMコマンドも使えるはずなのでご存知の方は試して頂きたい。
ただしRUNSQLSTM はあらかじめソース・ファイルにSQL文を登録しておかなければ
ならない。
RUNSQLSTMの使い方もいずれこのサイトで紹介する。