レコード中のフィールドを参照する場合は、フィールド名の前にコロン(:)を付けます。このように指定すると、現在のレコードのフィールド値が代入されます。SQL文字列で、前にコロン(:)が付いたフィールド名もバインド変数として参照されます。一重引用符で囲まれたバインド変数は、バインド変数としてではなくテキスト・リテラルとして扱われることに注意してください。
次の例では、制御ファイルの現行のフィールドおよび他のフィールドの参照方法を示します。また、バインド変数を一重引用符で囲むことにより、テキスト・リテラルとして扱われることを示しています。示されている概念を十分に理解するために、次の例の説明も参照してください。
LOAD DATA INFILE * APPEND INTO TABLE YYY ( field1 POSITION(1:6) CHAR "LOWER(:field1)" field2 CHAR TERMINATED BY ',' NULLIF ((1) = 'a') DEFAULTIF ((1)= 'b') "RTRIM(:field2)", field3 CHAR(7) "TRANSLATE(:field3, ':field1', ':1')", field4 COLUMN OBJECT ( attr1 CHAR(3) NULLIF field4.attr2='ZZ' "UPPER(:field4.attr3)", attr2 CHAR(2), attr3 CHAR(3) ":field4.attr1 + 1" ), field5 EXPRESSION "MYFUNC(:FIELD4, SYSDATE)" ) BEGINDATA ABCDEF1234511 ,:field1500YYabc abcDEF67890 ,:field2600ZZghl
この例に関する注意事項:
次の行では、:field1
は一重引用符で囲まれていないため、バインド変数として解釈されます。
field1 POSITION(1:6) CHAR "LOWER(:field1)"
次の行では、':field1'
と':1'
は一重引用符で囲まれているため、テキスト・リテラルとして解釈され、変更されずにTRANSLATE
関数に渡されます。
field3 CHAR(7) "TRANSLATE(:field3, ':field1', ':1')"
引用符で囲まれた文字列中で引用符を使用する方法の詳細は、「ファイル名およびオブジェクト名の指定」を参照してください。
各入力データ読取りでは、バインド変数で参照されたフィールドの値はバインド変数に置き換えられます。たとえば、最初のレコードの値ABCDEF
は、最初のフィールド:field1
にマップされます。この値は、引数としてLOWER
関数に渡されます。
SQL文字列のバインド変数によって現行のフィールドを参照する必要はありません。前述の例では、フィールドfield4.attr1
に対するSQL文字列のバインド変数によって、フィールドfield4.attr3
を参照しています。field4.attr1
フィールドは、入力レコードの値500およびNULL (2番目のレコードのNULLIF field4.attr2='ZZ'
句がTRUE
であるため)にマップされます。ただし、対応する列に格納された最終値はABCおよびGHLです。
field4.attr3
フィールドは、入力レコードの値ABCおよびGHLにマップされます。ただし、SQL式がfield4.attr1
を参照しているため、対応する列に格納された最終値は500 + 1 = 501およびGHLです。(NULLフィールドに1を足しても、結果はNULLフィールドになります。)
field5
フィールドは、入力レコードのどのフィールドにもマップされません。ターゲット列に格納されている値は、2つの引数をとるPL/SQL関数MYFUNC
の実行結果です。EXPRESSION
パラメータの使用には、入力データがフィールドにマップされないため、SQL文字列を使用して列の最終値を計算する必要があります。