外部ファイル、キーボード、ODBC データソース、またはシェイプファイルからデータベーステーブルにデータをインポートします。
INPUT INTO [ owner.]table-name input-options
input-options : [ ( column-name, ... ) ] [ BYTE ORDER MARK { ON | OFF } ] [ COLUMN WIDTHS ( integer, ...) ] [ DELIMITED BY string ] [ ENCODING encoding ] [ ESCAPE CHARACTER character ] [ ESCAPES { ON | OFF } ] [ FORMAT input-format ] [ FROM filename | PROMPT ] [ NOSTRIP ] [ SKIP integer ]
input-format : TEXT | FIXED
encoding : identifier | string
INPUT USING connection-string FROM source-table-name INTO destination-table-name [ CREATE TABLE { ON | OFF } ]
connection-string : { DRIVER=odbc-driver-name | DSN=odbc-data-source } [ ; { connection-parameter = value } ]
INPUT INTO [ owner.]table-name FROM filename FORMAT SHAPEFILE [ SRID srid-number ] [ ENCODING encoding ]
encoding : identifier | string
column-name テーブルのカラムの名前を、入力ファイルの値の順序に対応する順序でリストします。テーブルカラムの順序が入力ファイルの値の順序と異なる場合、またはテーブルのカラム数よりも入力ファイルのカラム数のほうが少ない場合、このパラメータを使用します。
BYTE ORDER MARK 句 この句は、入力ファイルのバイトオーダマーク (BOM) を処理するかどうかを指定するときに使用します。
BYTE ORDER MARK 句は、TEXT フォーマットのファイルから読み込む場合にのみ関係します。TEXT 以外の FORMAT 句とともに BYTE ORDER MARK 句を使用すると、エラーが発生します。
BYTE ORDER MARK 句は、UTF-8 か UTF-16 でエンコードされたファイルの読み込みまたは書き込みをするときにのみ使用されます。その他のエンコードで BYTE ORDER MARK 句を使用しようとすると、エラーが発生します。
ENCODING 句が指定されている場合
ENCODING 句が指定されていない場合
COLUMN WIDTHS 句 COLUMN WIDTHS 句で入力ファイルのカラムの幅を指定しますが、これは FIXED フォーマットの場合のみ指定できます。COLUMN WIDTHS を指定しない場合、幅はデータベースカラムのタイプによって決定されます。
CREATE TABLE 句 CREATE TABLE 句を使用して、インポート先テーブルが存在しない場合に作成するかどうかを指定します。デフォルトは ON です。
DELIMITED BY 句 DELIMITED BY 句を使用すると、TEXT 入力フォーマットのカラム値間でデリミタとして使用する文字列を指定できます。デフォルトのデリミタはカンマです。
ENCODING 句 encoding 引数では、ファイルの読み込みに使用されるエンコードを指定します。ENCODING 句は、TEXT および SHAPEFILE フォーマットでのみ使用できます。
Interactive SQL を実行するとき、データのインポートに使用されるエンコードは次の順序で決定されます。
ENCODING 句で指定されたエンコード (この句が指定されている場合)。
default_isql_encoding オプションで指定されたエンコード (このオプションが設定されている場合)。
ファイルにバイトオーダーマークがある場合は、適切な Unicode エンコードが使用されます。
実行しているコンピュータのデフォルトのエンコード。英語版 Windows コンピュータでは、デフォルトエンコードは 1252 または 850 です。
OUTPUT 文を使用して入力ファイルを作成したときにエンコードを指定した場合は、INPUT 文でも同じ ENCODING 句を指定してください。
ESCAPE CHARACTER 句 16 進コードに使用するデフォルトのエスケープ文字は円記号 (\) です。たとえば、\x0A は改行文字です。
改行文字は \n と指定できます。他の文字は、タブ文字は \x09 などのように、16 進の ASCII コードを使用して指定できます。2 つの円記号 (\) は 1 つの円記号として解釈されます。円記号 (\) の後に n、x、X、\ 以外の文字がある場合、それらは別々の文字と解釈されます。たとえば、\q は円記号と q と解釈されます。
エスケープ文字は、ESCAPE CHARACTER 句を使って変更することができます。たとえば、感嘆符 (!) をエスケープ文字として使用するには、次のように指定します。
... ESCAPE CHARACTER '!' |
ESCAPES 句 ESCAPES を ON (デフォルト) にすると、データベースサーバによって円記号に続く文字は特殊文字として解釈されます。ESCAPES を OFF にすると、ソースに記載されているとおりに文字が読み取られます。
FORMAT 句 FORMAT 句によって、出力ファイルフォーマットを指定します。
FORMAT 句が指定されていない場合、input_format オプションでフォーマットが設定されます。デフォルト設定は TEXT です。Interactive SQL で [ツール] » [オプション] » [インポート/エクスポート] をクリックし、[デフォルトのインポートフォーマット] フィールドで [テキスト] または [固定] を指定しても入力フォーマットを指定できます。
サポートされるフォーマットは次のとおりです。
TEXT 入力行は文字であり、1 行あたり 1 つのローで構成され、カラム値はデリミタで区切られているものと見なされます。アルファベットの文字列を一重引用符または二重引用符で囲むことができます。デリミタを含む文字列は、一重引用符または二重引用符のどちらかで囲みます。文字列そのものに一重引用符または二重引用符を含める場合は、引用符文字を文字列の中で 2 つ続けて入力して使用してください。DELIMITED BY 句を使って、デフォルトのカンマではなく、他のデリミタを使用できます。
他にも、3 つの特別なエスケープシーケンスを使用できます。2 文字の \n は改行文字を表し、\\ は 1 つの (\) を表し、\xDD は 16 進コード DD の文字を表します。
省略された値は NULL として扱われます。その位置の値を NULL にできない場合は、数値カラムには 0、文字カラムには空の文字列が挿入されます。
FIXED 入力行は固定フォーマットです。カラムの幅は、COLUMN WIDTHS 句を使って指定できます。カラムの幅を指定しない場合、ファイル内のカラム幅は、対応するデータベースカラムで許容される文字の最大値と同じ値にしてください。
FIXED フォーマットは、埋め込まれた改行とファイルの終わり文字シーケンスを含むバイナリカラムでは使用できません。
SHAPEFILE 入力は、ESRI シェイプファイルの形式です。LOAD 文と違って、INPUT 文を使用してシェイプファイルをロードする場合、シェイプファイルをクライアントコンピュータに置く必要があります。関連付けられている .shx ファイルと .dbf ファイルは、.shp ファイルと同じディレクトリに配置し、ベースファイル名を同じ名前にしてください。
シェイプファイルをロードするときにエンコードが指定されていない場合、デフォルトは ISO-8859-1 になります。
SRID 句を使用して、ジオメトリに関連付ける SRID を指定します。SRID を指定しない場合、デフォルトとして SRID 0 が使用されます。理想としては、シェイプファイルのプロジェクトファイル (.prj) に記載されている SRID と同じ SRID にしてください。この SRID を使用できない場合は、これと同等の SRID を使用します。SQL Anywhere には、sa_install_feature システムプロシージャを使用してデータベースに追加できる SRID が多数用意されています。
DBASE II、DBASE III、FoxPro、Lotus 123、または Excel 97 など、その他のフォーマットを使用する場合は、INPUT USING を使用します。
FROM filename 句 file-name は引用符で囲むことも囲まないこともできます。文字列を引用符で囲む場合、他の SQL 文字列と同じフォーマット要件に従います。
パスが引用されている場合、ディレクトリパスを示すには、円記号 (\) を 2 つの円記号で表してください。
相対的な filename のロケーションは、次のように決定されます。
Interactive SQL で INPUT 文を直接実行した場合、filename へのパスは、Interactive SQL が動作しているディレクトリとの相対パスとして解決されます。たとえば、ディレクトリ c:\work から Interactive SQL を開き、次の文を実行すると想定します。
INPUT INTO GROUPO.Employees FROM 'inputs\\inputfile.dat'; |
Interactive SQL は c:\work\inputs\inputfile.dat を検索します。
Interactive SQL では、.sql ファイルに INPUT 文が存在する場合、最初に filename へのパスをこのファイルのロケーションとの相対パスとして解決しようとします。これが失敗した場合は、Interactive SQL が動作しているディレクトリとの相対パスで filename を検索します。
たとえば、ファイル c:\homework\inputs.sql があり、この中に次の文が含まれていると想定します。
INPUT INTO GROUPO.Employees FROM 'inputs\\inputfile.dat'; |
Interactive SQL は、最初に c:\homework\inputs で inputfile.dat を検索します。このロケーションで inputfile.dat が見つからない場合は、Interactive SQL が動作しているディレクトリを検索します。
FROM source-table-name 句
source-table-name パラメータは、送信元データベースのテーブル名を含む、引用符で囲まれた文字列です。この名前は、database-name.owner.table-name、owner.table-name、または table-name の形式で指定できます。ピリオドが送信元データベースのネイティブのセパレータではない場合も、コンポーネントの区切りにはピリオドを使用します。送信元データベースにデータベース名は必要であるが所有者名は不要な場合、source-table-name のフォーマットは database..table とする必要があります (この場合、所有者名は空)。パラメータ内の名前を引用符で囲まないでください。たとえば、'dba."my-table"'
を使用しないで、代わりに 'dba.my-table'
を使用します。
PROMPT 句 PROMPT 句では、ユーザがロー内の各カラムの値を入力できます。ウィンドウモードで実行している場合は、ユーザが新規ローの値を入力できるウィンドウが表示されます。コマンドラインから Interactive SQL を実行している場合は、コマンドラインに各カラムの値を入力するように求められます。
NOSTRIP 句 通常、TEXT 入力フォーマットの場合、引用符の付いていない文字列から後続ブランクを削除してから値を挿入します。NOSTRIP を使うと、後続ブランクを削除しないようにできます。後続ブランクは、オプションが使用されているかどうかにかかわらず、引用符付きの文字列からは削除されません。先行ブランクは、NOSTRIP オプション設定にかかわらず引用符の付いていない文字列から削除されます。
SKIP 句 TEXT ファイルから行を挿入する場合、SKIP 句はファイルの先頭から指定の行数を省略します。指定する数は正の整数にします。SKIP 句を使用できるのは、TEXT フォーマットの場合のみです。
ファイル内の行数を超える行数を指定した場合、INPUT 文はデータを一切挿入せず、エラーも返されません。
USING 句 USING 句は ODBC データソースからデータを入力します。DSN オプションを使用して ODBC データソース名を指定するか、または DRIVER オプションを使用して ODBC ドライバ名と接続パラメータを指定できます。connection-parameter パラメータは、データベース固有の接続パラメータのリストです。
odbc-data-source パラメータは、ユーザ名または ODBC データソース名です。たとえば、SQL Anywhere サンプルデータベースの odbc-data-source は SQL Anywhere 16 Demo です。
odbc-driver-name パラメータは ODBC ドライバ名です。SQL Anywhere データベースでは、odbc-driver-name は SQL Anywhere 16 です。Ultra Light データベースでは、odbc-driver-name は Ultra Light 16 です。
INPUT 文を使用すると、指定したデータベーステーブルの中に効率よく大量に挿入できます。入力行は、入力ウィンドウを使用してユーザが入力するか (PROMPT を指定した場合)、またはファイルから読み込まれます (FROM filename を指定した場合)。どちらも指定しない場合は、INPUT 文を含む SQL スクリプトファイルから入力が読み込まれます。Interactive SQL の場合は、[SQL 文] ウィンドウ枠から直接読み込むこともできます。この場合、入力は、文字列 END のみを含む行で終了します。
[SQL 文] ウィンドウ枠から入力を直接読み込む場合、INPUT 文の末尾に挿入するレコード値の前に、セミコロンを指定する必要があります。次に例を示します。
INPUT INTO Owner.TableName; value1, value2, value3 value1, value2, value3 value1, value2, value3 value1, value2, value3 END |
END キーワード (セミコロンなし) は、ファイル名が指定されておらず、PROMPT キーワードを含まない INPUT 文のデータを終了します。
カラムリストを指定すると、目的のテーブルの指定したカラムにデータが挿入されます。デフォルトで、INPUT 文では、入力ファイルのカラム値がデータベーステーブル定義のカラム値と同じ順序で出現していると想定されます。カラムの順序が異なる場合、column-name パラメータを使用して、テーブルカラムを入力ファイルのカラム値と同じ順序でリストする必要があります。
デフォルトでは、INPUT 文は、エラーの原因となるローを挿入しようとすると停止します。on_error と conversion_error オプションを設定すると、さまざまな方法でエラーを処理できます。
文字列値が INPUT でトランケートされる場合、Interactive SQL は [メッセージ] タブに警告を表示します。NOT NULL カラムで値が見つからない場合、数値型カラムは 0 に設定され、数値型でないカラムは空の文字列に設定されます。INPUT で NULL のローを挿入しようとすると、入力ファイルには空のローができます。
INPUT 文は Interactive SQL コマンドであるため、サーバによって実行される文では使用できません。
テーブルの所有者であるか、INSERT ANY TABLE システム権限を持っているか、またはテーブルに対する INSERT 権限を持っていることが必要です。さらに、SELECT ANY TABLE システム権限、または、テーブルに対する SELECT 権限も必要です。
なし
SQL/2008 ベンダー拡張。
この例では、架空の TEXT ファイル new_emp.inp から Employees テーブルにデータをインポートします。
INPUT INTO GROUPO.Employees FROM new_emp.inp FORMAT TEXT; |
この例では、テーブル ulTest をテーブル saTest にコピーします。ulTest は Ultra Light データベースのファイル C:\test\myULDatabase.udb 内のテーブルです。saTest は demo.db に作成されたテーブルです。
INPUT USING 'driver=UltraLite 16;dbf=C:\\test\\myULDatabase.udb' FROM "ulTest" INTO "saTest"; |
この例では、シェイプファイル myshapefile.shp を myTable テーブルにロードし、SRID 4269 をシェイプファイルのジオメトリに割り当てます。
INPUT INTO myTable FROM 'myshapefile.shp' FORMAT SHAPEFILE SRID 4269 |
この例では、Products テーブルに新しいローを追加し、各カラムに値を入力するようユーザに要求します。
INPUT INTO GROUPO.Products PROMPT; |
この例では、ファイル c:\temp\input.dat から Employees テーブルにデータをロードします。バックスラッシュを 2 つ使用する方法に注意してください。
INPUT INTO GROUPO.Employees FROM 'c:\\temp\\input.dat'; |
次の例では、テーブル myInventory を作成して、データを含む stock.txt ファイルからデータをインポートしますが、テーブル定義とはカラムの順序が異なります。順序の不一致を修正するには、INPUT 文のテーブル名の後に column-name パラメータを使用して、インポートに必要な正しいカラムの順序を指定します。つまり、(item, Quantity) と指定することにより、入力ファイルの最初のカラム値をテーブルの 2 番目のカラムに配置し、入力ファイルの 2 番目のカラム値をテーブルの最初のカラムに配置するよう、Interactive SQL に指示します。
CREATE TABLE myInventory ( Quantity INTEGER, item VARCHAR(60) ); INPUT INTO myInventory (item, Quantity) FROM stock.txt; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |