DDS で作成したファイルと SQL で作成したテーブルとに何か違いがあるかどうか、を見てみました。
どっちも同じ PF なんじゃないのか、と言うのは基本的にはだいたい正しいのですが、実はちょっといろいろ違いがあります。
確かに SQL/400 が出てきた当初は同じ物理ファイルに対して SQL で必要な基本機能を一段上にかぶせたインターフェイスといったところがありましたが、DB2/400
としてのデータベース・エンジンの進化の過程でいろいろ変わってきているみたいですね。
今回は、同じようなファイルを CRTPF と CREATE TABLE で作成し、DSPFFD での結果が同一であることを確認した上で、同じ CPYF コマンドの結果が異なってしまう、という例を見てみたいと思います。
これが DDS で、これを CRTPF します。

これが CREATE TABLE の内容です。
後で見ますが、上の PF とこのテーブルは DSPFFD で見るとまったく同じ属性を持つものになります。

最初に数字のデータとしては正しくないデータを準備します。
枠だけのファイルを作って、
![]()
DFU でデータを入力します。

DDS で作成したファイルにコピーしてみましょう。

DDS から CRTPF したファイルへのコピーは、データが切り捨てられてはいるものの正常に終了しています。
つまりレコードは結果的にコピーはされています。
![]()
同じ CPYF コマンドを、CREATE TABLE で作成したテーブルをコピー先に変更しただけで実行してみましょう。
こちらはエラーで、結果としてデータはコピーされていないのがわかります。

ついでですがコピーできてしまった PF の内容を見てみましょう。
DFU での表示です。
エラーが出て、データは表示できません。

こちらは QRY での表示です。
一応表示はされますが、置換文字になっており、さらにエラーが出ています。

これは対話型 SQL (STRSQL) で SELECT した結果です。
エラーメッセージがなくなってます。表示は置換文字によるものですね。

DELETE はアッサリとできます。

特に解説はしませんが、違いが存在しているのがわかります。見ていきましょう。
昔自分で書きとめておいた若干のおぼえ書きがあります。一応こちらも参照してみてください。
さて、それぞれのファイル・フィールド記述とファイル記述を見て行きましょう。
こちらが CRTPF でできたファイルの DSPFFD 結果です。


こちらが SQL で作成されたテーブルの DSPFFD 結果です。
違いはレコード様式名がファイル名と同一になっているくらいなのがわかりますね。


こちらがそれぞれのファイル記述 (DSPFD 結果) になります。
こちらは DDS で作成された PF の DSPFD 結果です。

こちらが SQL で作成されたテーブルの DSPFD 結果ですが、「SQL ファイル・タイプ」という属性があり、そこに「TABLE」という指定がありますね。
もう一度上の PF に対しての DSPFD の結果を見てください。この属性自体が存在していないのが確認できます。

DDS の方の続きです。

テーブルの方の続きです。
SIZE が *NOMAX、REUSEDLT が *YES になっています。

DDS の結果の続きです。

テーブルの結果の続きです。
メンバー・サイズのところが *NOMAX になってますね。

DDS の結果の続きです。

テーブルの結果の続きです。
「データ空間サイズ」がけっこう違いますね。

DDS の結果の続きです。
このあたりからもう差はありません。

SQL テーブルの結果の続きです。

DDS の結果の続きです。

SQL テーブルの結果の続きです。

DDS の結果の続きです。
「合計メンバーサイズ」が違っていますね。

|
|