この文は、外部ファイルからデータベース・テーブルの中へバルク・データをインポートするために使用します。またこの文は、SQL Anywhere の dbunload ユーティリティ (reload.sql ファイル) の出力処理もサポートします。
LOAD [ INTO ] TABLE [ owner.]table-name ( column-name, ... ) FROM stringfilename [ load-option ... ]
load-option : CHECK CONSTRAINTS { ON | OFF } | COMPUTES { ON | OFF} | DEFAULTS { ON | OFF } | DELIMITED BY string | ENCODING encoding | ESCAPES { ON } | FORMAT { ASCII | TEXT} | ORDER { ON | OFF}| | QUOTES { ON | OFF } | SKIP integer | STRIP { ON | OFF | BOTH } | WITH CHECKPOINT { ON | OFF }
comment-prefix : string
encoding : string
column-name この句は、データのロード先となる 1 つ以上のカラムを指定するために使用します。DEFAULTS が OFF に設定されている場合、カラム・リストにないカラムは NULL になります。DEFAULTS オプションが ON で、カラムにデフォルト値が入っている場合は、その値が使用されます。DEFAULTS オプションが OFF で、NULL 入力不可のカラムがカラム・リストから省かれている場合は、データベース・サーバは、空の文字列をカラムの型に変換しようとします。
カラム・リストが指定されていると、ファイルに存在すると思われるカラムと、想定されるファイル内でのカラムの順序がカラム・リストにリストされます。カラム名を繰り返すことはできません。
FROM string-filename この句は、データのロード元となるファイルを指定するために使用します。string-filename は文字列としてデータベース・サーバに渡されます。したがって、文字列は他の SQL 文字列と同じデータベースのフォーマット要件に従います。特に、次の点に注意してください。
ディレクトリ・パスを示すには、円記号 (\) を 2 つの円記号で表してください。したがって、ファイル c:\temp\input.dat から Employees テーブルにデータをロードする文は、次のようになります。
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' ... |
パス名はデータベース・サーバを基準にした相対パスを指定します。クライアント・アプリケーションではありません。
UNC パス名を使用すると、データベース・サーバ以外のコンピュータ上のファイルからデータをロードできます。
load-option 句 さまざまなロード・オプションを使用して、データのロード方法を制御できます。次のリストは、サポートされているロード・オプションを示します。
CHECK CONSTRAINTS 句 この句は、ロード中に制約をチェックするかどうかを制御します。CHECK CONSTRAINTS はデフォルトで ON に設定されますが、アンロード・ユーティリティ (ulunload) は CHECK CONSTRAINTS を OFF に設定して LOAD TABLE 文を書き出します。CHECK CONSTRAINTS を OFF に設定すると、データベースの再構築などの場合に役立つ検査制約が無効になります。
DEFAULTS 句 デフォルトでは、DEFAULTS は OFF に設定されています。DEFAULTS が OFF の場合は、カラム・リストにないカラムすべてに NULL が割り当てられます。DEFAULTS が OFF に設定されており、NULL 入力不可のカラムがカラム・リストから省かれている場合は、データベース・サーバは、空の文字列をカラムの型に変換しようとします。DEFAULTS が ON に設定されており、カラムにデフォルト値が入っている場合は、その値が使用されます。
DELIMITED BY 句 この句は、カラム・デリミタ文字を指定するために使用します。デフォルトのカラム・デリミタ文字列はカンマです。ただし、最長で 255 バイトの文字列を指定できます。たとえば、... DELIMITED BY '###' ...
などです。他の SQL 文字列と同じフォーマット要件が適用されます。タブで区切った値を指定する場合、タブ文字を表す 16 進のエスケープ・シーケンス (9) を使用して、... DELIMITED BY '\x09' ...
のように指定します。
ESCAPES 句 ESCAPES は常に ON であるため、データベース・サーバによって円記号に続く文字が認識され、特殊文字として解釈されます。改行文字は \n との組み合わせとしてインクルードされ、他の文字はタブ文字の \x09 のような 16 進の ASCII のコードとしてデータにインクルードされます。2 つの円記号 (\) は 1 つの円記号として解釈されます。円記号 (\) の後に n、x、X、\ 以外の文字がある場合、それらは別々の文字と解釈されます。たとえば、\q であれば、円記号と q が挿入されます。
FORMAT 句 この句は、データのロード元となるデータ・ソースのフォーマットを指定します。TEXT の場合、(ENCODING オプションで定義したとおり) 入力行は文字であり、1 行あたり 1 つのローで構成され、カラム・デリミタ文字列によって値が区切られているものとみなされます。ASCII もサポートされています。
QUOTES 句 この句は、文字列を引用符で囲むかどうかを指定します。Ultra Light は ON のみをサポートしているため、LOAD TABLE 文は引用符文字で囲まれた文字列を探します。引用符文字はアポストロフィ (一重引用符) です。文字列の中で最初に出てくるこのような文字は、その文字列の引用符文字として処理されます。文字列の終わりには先頭にあるものと同じ引用符が必要です。
カラム・デリミタ文字列をカラム値の中に入れることができます。また、引用符文字は値の一部とはみなされません。したがって、次の行はアドレスにカンマがあるかどうかは関係ありません。また、アドレスを囲む引用符は、データベースへは挿入されません。
'123 High Street, Anytown',(715)398-2354 |
値の中に引用符文字をインクルードするには、2 つの引用符を使用する必要があります。次の行は、第 3 カラムの中へ一重引用符文字である値を入れます。
'123 High Street, Anytown','(715)398-2354','''' |
SKIP 句 この句は、ファイルの最初の数行を無視するかどうかを指定するために使用します。integer 引数では、スキップする行数を指定します。たとえば、この句を使用して、カラム見出しを含む行をスキップできます。
STRIP 句 この句は処理されますが、無視されます。この句は、引用符がない値に、値を挿入する前に削除された先行ブランクまたは後続ブランクがあるかどうかを指定します。STRIP オプションは次のオプションを受け入れます。
STRIP ON 先行ブランクを削除します。
STRIP OFF 先行ブランクまたは後続ブランクを削除しません。
STRIP BOTH 先行ブランクと後続ブランクの両方を削除します。
WITH CHECKPOINT 句 この句は、チェックポイントを実行するかどうかを指定するために使用します。デフォルト設定は OFF です。この句を ON に設定すると、文が正常に完了した後、チェックポイントが発行されます。
LOAD TABLE を使うと、ファイルからデータベース・テーブルの中へ効率よく大量の挿入を行えます。この文は主に、SQL Anywhere の dbunload ユーティリティ (reload.sql ファイル) の出力処理をサポートする手段です。
LOAD TABLE は、Windows と Linux でのみサポートされており、Palm OS や Windows Mobile ではサポートされていません。
FORMAT TEXT の場合、値を指定しないことが、NULL 値を指定することになります。たとえば、1,,'Fred',
という値を含むファイルに 3 つの値が予想される場合、挿入される値は 1、NULL、Fred です。ファイルに 1,2,
が含まれる場合、値 1、2、NULL が挿入されます。空白のみで構成される値は、NULL 値と扱われます。ファイルに 1, ,'Fred',
が含まれる場合、値 1、NULL、Fred が挿入されます。他の値はすべて NULL 以外と扱われます。たとえば、'' (一重引用符が 2 つ) は空の文字列です。'NULL' は 4 文字の文字列です。
LOAD TABLE でロードしていないカラムが NULL 値を許容しておらず、ファイル値が NULL の場合、数値カラムには値 0 (ゼロ)、文字カラムには空の文字列 ('') が指定されます。LOAD TABLE でロードされたカラムが NULL 値を許容し、ファイル値が NULL の場合、カラム値は (すべての型で) NULL になります。
テーブルに a、b、c の各列が含まれ、入力データに a、b、c が含まれているときに、LOAD 文がデータのロード先として a と b のみを指定した場合は、カラム c に次の値が挿入されます。
DEFAULTS ON が指定されると、カラム c にデフォルト値が入っている場合は、デフォルト値が使用されます。
カラム c にデフォルト値がなく、NULL が許容されている場合は、NULL が使用されます。
カラム c にデフォルト値がなく、NULL が許容されていない場合は、カラムのデータ型に応じて、ゼロ (0) または空の文字列 ('') が使用されるかエラーが返されます。
オートコミット。
SQL/2003 ベンダ拡張。
次に、LOAD TABLE の例を示します。まずテーブルを作成し、次に input.txt というファイルを使用してテーブルにデータをロードします。
CREATE TABLE t( a CHAR(100) primary key, let_me_default INT DEFAULT 1, c CHAR(100) ); |
次に、ファイル input.txt の内容を示します。
'this_is_for_column_c', 'this_is_for_column_a', ignore_me |
次の LOAD 文は、input.txt というファイルをロードします。
LOAD TABLE T ( c, a ) FROM 'input.txt' FORMAT TEXT DEFAULTS ON; |
コマンド SELECT * FROM t
は、次の結果セットを返します。
a | let_me_default | c |
---|---|---|
this_is_for_column_a | 1 | this_is_for_column_c |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |