2016.11.10
 

IBM iでDDSから作成した場合とSQL文で作成した時のファイルの違い

Question

IBM iでSQL文を使って物理ファイル(PF)や論理ファイル(LF)を作成することはできますか。5250上で作成した時との違いはありますか。

Answer

PF(物理ファイル)はCREATE TABLE、LF(論理ファイル)はCREATE INDEX(またはCREATE VIEW)で作成されます(※LFについてはSQLと考え方が異なるため、ちょうどこれだというものがありませんが、INDEXのほうがより近いようです。どちらのコマンドで作成してもIBMi上はLFに見えます)。
 それぞれ、IBMiのKnowledge Centerのサイトに構文について書かれたページがあります。たとえばCREATE TABLEのページでは、権限の項目に「物理ファイル作成 (CRTPF) コマンドに対する *USE 権限」と記載されており、対応するIBMi DB2上のコマンドが間接的にわかるよう記述されています。
 SQL文で作成した物理ファイルや論理ファイルは一見通常のファイルと同じように見えますが、マシン内では区別されています。SQLにしかない特性(文字以上のフィールド名、IBMi上にないフィールドタイプなど)を持っている場合があるためです。特に、CREATE VIEWで作成したLFについては、DSPFDを確認すると作成に利用したSQL構文を確認できる仕様となっています。ファイル名・フィールド名の文字数や、データ・タイプはIBMiの制限にしたがって作成するようお気をつけください。文字数がIBMiの制限を超えた場合、SQL上での名称と、IBMi上での名称に差異(名称の頭5文字+数字)ができてしまいます。それぞれの名称はQSYS2/SYSTABLES上でSQLテーブル名はTABLE_NAME、物理ファイル名はSYSTEM_TABLE_NAMEで確認ができます。DDS上で作成したフィールド・タイプはSQL上では(図1)のように見えています。
 IBMi上で、ファイルを利用したPGM作成時に困る点は、SQLでファイルを作成するとレコード様式名がファイル名と同じになってしまうことです。RPGで利用する場合は、F仕様書上でRENAMEキーワードを用いてファイル名とは別の名前に変更してご利用ください。

「CREATE TABLE」
http://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i
_73/db2/rbafzxcschema.htm


「CREATE INDEX」
http://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i
_73/db2/rbafzxcindx.htm

ページトップ

ボタン