プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
12cリリース1 (12.1.0.2)
B71303-09
目次へ移動
目次
索引へ移動
索引

前
次

フィールドの参照

レコード中のフィールドを参照する場合は、フィールド名の前にコロン(:)を付けます。このように指定すると、現在のレコードのフィールド値が代入されます。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文字列を使用して列の最終値を計算する必要があります。