データ記憶域および転送メディアには、物理レコードが固定長のものがあります。データ・レコードが比較的短い場合、メディアを効率的に使用するために複数の論理レコードをまとめて1つの物理レコードに記録できます。
ここでは、入力ファイルの1件の物理レコードを2件の論理レコードとみなし、INTO
TABLE
句を2回指定してemp
表にデータをロードする方法について説明します。たとえば、次のようなデータの例を考えます。
1119 Smith 1120 Yvonne 1121 Albert 1130 Thomas
次の制御ファイルを使用して論理レコードを抽出します。
INTO TABLE emp (empno POSITION(1:4) INTEGER EXTERNAL, ename POSITION(6:15) CHAR) INTO TABLE emp (empno POSITION(17:20) INTEGER EXTERNAL, ename POSITION(21:30) CHAR)
同じレコードを、別の指定方法でロードできます。次の制御ファイルでは、絶対的位置を指定するかわりに相対的な位置を指定しています。ここでは、各フィールドが空白(" ")1文字、またはいくつかの空白やタブ(WHITESPACE
)で区切られていることを示しています。
INTO TABLE emp (empno INTEGER EXTERNAL TERMINATED BY " ", ename CHAR TERMINATED BY WHITESPACE) INTO TABLE emp (empno INTEGER EXTERNAL TERMINATED BY " ", ename CHAR) TERMINATED BY WHITESPACE)
この例では、2番目のempno
フィールドは、別のINTO TABLE
句に指定されていますが、1番目のename
の直後に指定されていることに注意してください。新しいINTO TABLE
句に対して、レコードの先頭からのフィールド・スキャンが実行されるわけではありません。かわりに、前回スキャンが停止した位置から続行されます。
レコードのスキャンを特定の位置から強制的に開始するには、POSITION
パラメータを使用します。詳細は、「異なる入力レコード形式の区別」および「複数表へのデータのロード」を参照してください。