Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (E ~ O)

 

INPUT 文 [Interactive SQL]

この文は、外部ファイルまたはキーボードからデータベースのテーブルにデータをインポートするか、または汎用 ODBC データ・ソースからデータをインポートするときに使用します。

構文 1 - 外部ファイルまたはキーボードからのインポート
INPUT INTO [ owner.]table-name input-options
input-options :
[ ( column-name, ... ) ]
[ BY { ORDER | 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 ]
input-format :
TEXT 
| FIXED
encoding : identifier または string
構文 2 - ODBC データ・ソースからのインポート
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 } ]
パラメータ
  • BY 句   BY 句は、入力ファイルのカラムをテーブル・カラムと一致させる基準として、ユーザがリストの並び順 (デフォルトの ORDER) または名前 (NAME) を指定できるようにします。すべての入力フォーマットが、ファイルの中にカラム名情報を持っているわけではありません。NAME を使用できるのは、カラム名情報を持っているフォーマットの場合のみです。

  • BYTE ORDER MARK 句   この句は、データのバイト順マーク (BOM) を処理するかどうかを指定するときに使用します。

    BYTE ORDER MARK 句は、TEXT フォーマットのファイルから読み込む場合にのみ関係します。BYTE ORDER MARK 句を TEXT 以外の FORMAT 句とともに使用しようとすると、エラーが返されます。

    BYTE ORDER MARK 句は、UTF-8 か UTF-16 でエンコードされたファイルの読み込みまたは書き込みをするときにのみ使用されます。その他のエンコードで BYTE ORDER MARK 句を使用しようとすると、エラーが返されます。

    ENCODING 句が指定されている場合

    • BYTE ORDER MARK オプションが ON のときに、UTF-16BE または UTF-16LE などのエンディアンを持つ UTF-16 エンコードを指定すると、Interactive SQL はデータの最初で BOM を検索します。BOM がある場合は、データのエンディアンの検証に使用されます。間違ったエンディアンを指定すると、エラーが返されます。
    • BYTE ORDER MARK オプションが ON のときに、明示的なエンディアンのない UTF-16 エンコードを指定すると、Interactive SQL はデータの最初で BOM を検索します。BOM がある場合は、データのエンディアンの確認に使用されます。BOM がない場合は、オペレーティング・システムのエンディアンであると想定されます。
    • BYTE ORDER MARK オプションが ON のときに、UTF-8 エンコードを指定すると、Interactive SQL はデータの最初で BOM を検索します。BOM がある場合は無視されます。

    ENCODING 句が指定されていない場合

    • ENCODING 句を指定しないで BYTE ORDER MARK オプションを ON にすると、Interactive SQL は入力データの最初で BOM を検索します。BOM が見つかると、BOM (UTF-16BE、UTF-16LE、または UTF-8) のエンコードに基づいてソース・エンコードが自動的に選択され、BOM はロードするデータの一部であるとは見なされなくなります。
    • ENCODING 句を指定せず、BYTE ORDER MARK オプションが OFF であるか、または BOM が入力データの先頭で見つからない場合は、データベースの CHAR エンコードが使用されます。

  • COLUMN WIDTHS 句   COLUMN WIDTHS を指定できるのは、FIXED フォーマットの場合だけです。これは入力ファイルのカラムの幅を指定します。COLUMN WIDTHS を指定しない場合、幅はデータベース・カラムのタイプによって決定されます。

  • CREATE TABLE 句   CREATE TABLE 句を使用して、インポート先テーブルが存在しない場合に作成するかどうかを指定します。デフォルトは ON です。

  • DELIMITED BY 句   DELIMITED BY 句を使用すると、TEXT 入力フォーマットの中でデリミタとして使用する文字列を指定できます。デフォルトのデリミタはカンマです。

  • ENCODING 句   encoding 引数では、ファイルの読み込みに使用されるコードを指定できます。ENCODING 句は、TEXT フォーマットでのみ使用できます。

    SQL Anywhere でサポートされるエンコードのリストを取得する方法については、サポートされている文字セットを参照してください。

    Interactive SQL の場合、encoding を指定しないと、ファイルの読み込みに使用されるエンコードは次の順序で決定されます。

    • default_isql_encoding オプションで指定されたエンコード (このオプションが設定されている場合)

    • Interactive SQL が動作しているコンピュータ上のオペレーティング・システムの文字セットのデフォルトのエンコード

    OUTPUT 文を使用して入力ファイルを作成したときにエンコードを指定した場合は、INPUT 文でも同じ ENCODING 句を指定してください。

    Interactive SQL とエンコードの詳細については、default_isql_encoding オプション [Interactive SQL]を参照してください。

    データにバイト順マークを含めるには、BYTE ORDER 句を指定します。

  • 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 句を指定しない場合、値の各セットは Interactive SQL の SET OPTION input_format 文で設定したフォーマットとする必要があります。

    コマンド・ファイルからの入力は、END がある行で終了します。ファイルからの入力はファイルの最後で終了します。

    使用できる入力フォーマットは、次のとおりです。

    • TEXT   入力行は文字であり、1 行あたり 1 つのローで構成され、カラム値はデリミタで区切られているものと見なされます。アルファベットの文字列をアポストロフィ (一重引用符) または二重引用符で囲むことができます。デリミタを含む文字列は、一重引用符または二重引用符のどちらかで囲みます。文字列そのものに一重引用符または二重引用符を含める場合は、引用符文字を文字列の中で 2 つ続けて入力して使用してください。DELIMITED BY 句を使って、デフォルトのカンマではなく、他のデリミタを使用できます。

      他の 3 つの特別なシーケンスも認識できます。2 つの文字 \n は改行文字を表し、\ は 1 つの (\) を表し、シーケンス \xDD は 16 進コード DD の文字を表します。

      ファイルに値が NULL の可能性があることを示すエントリがある場合、そのデータは NULL として扱われます。その位置の値を NULL にできない場合は、数値カラムには 0、文字列カラムには空の文字列が挿入されます。

    • FIXED   入力行は固定フォーマットです。カラムの幅は、COLUMN WIDTHS 句を使って指定できます。カラムの幅を指定しない場合、ファイル内のカラム幅は、対応するデータベース・カラムの型の値に必要な文字の最大値と同じにしてください。

      FIXED フォーマットは、埋め込まれた改行とファイルの終わり文字シーケンスを含むバイナリ・カラムでは使用できません。

    DBASEII、DBASE III、FoxPro、Lotus 123、または Excel 97 など、その他のフォーマットを使用する場合は、INPUT USING を使用する必要があります。

  • FROM filename 句   file-name は引用符で囲むことも囲まないこともできます。文字列を引用符で囲む場合、他の SQL 文字列と同じフォーマット要件に従います。

    ディレクトリ・パスを示すには、円記号 (\) を 2 つの円記号で表してください。したがって、ファイル c:\temp\input.dat から Employees テーブルにデータをロードする文は、次のようになります。

    INPUT INTO Employees
    FROM 'c:\\temp\\input.dat';

    相対的な filename のロケーションは、次のように決定されます。

    • Interactive SQL で INPUT 文を直接実行した場合、filename へのパスは、Interactive SQL が動作しているディレクトリとの相対パスとして解決されます。たとえば、ディレクトリ c:\work から Interactive SQL を開き、次の文を実行すると想定します。

      INPUT INTO 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 Employees
       FROM 'inputs\\inputfile.dat';

      Interactive SQL は、最初に c:\homework\inputsinputfile.dat を検索します。このロケーションで inputfile.dat が見つからない場合は、Interactive SQL が動作しているディレクトリを検索します。

  • FROM source-table-name 句   source-table-name パラメータは、送信元データベースのテーブル名を含む、引用符で囲まれた文字列です。この名前は、database-name.owner.table-nameowner.table-name、または単に table-name の形式で指定できます。ピリオドが送信元データベースのネイティブのセパレータではない場合も、コンポーネントの区切りにはピリオドを使用します。送信元データベースにデータベース名は必要であるが所有者名は不要な場合、source-table-name のフォーマットは database..table とする必要があります (この場合、所有者名は空)。パラメータ内の名前は引用符で囲まないでください (たとえば、'dba."my-table"' は使用しないでください。代わりに、'dba.my-table' を使用します)。

  • INTO 句   データを入力するテーブルの名前です。

  • PROMPT 句   PROMPT 句では、ユーザがロー内の各カラムの値を入力できます。ウィンドウ・モードで実行している場合は、ユーザが新規ローの値を入力できるウィンドウが表示されます。コマンド・ラインから Interactive SQL を実行している場合は、コマンド・ラインに各カラムの値を入力するように求められます。

  • NOSTRIP 句   通常、TEXT 入力フォーマットの場合、引用符の付いていない文字列から後続ブランクを削除してから値を挿入します。NOSTRIP を使うと、後続ブランクを削除しないようにできます。後続ブランクは、オプションが使用されているかどうかにかかわらず、引用符付きの文字列からは削除できません。先行ブランクは、NOSTRIP オプション設定にかかわらず引用符の付いていない文字列から削除されます。

  • USING 句   USING 句は ODBC データ・ソースからデータを入力します。DSN オプションを使用して ODBC データ・ソース名を指定するか、または DRIVER オプションを使用して ODBC ドライバ名と接続パラメータを指定できます。Connection-parameter は、データベース特定の接続パラメータのオプションのリストです。

    odbc-data-source は、ユーザ名または ODBC データ・ソース名です。たとえば、SQL Anywhere デモ・データベースの odbc-data-source は SQL Anywhere 11 Demo です。

    Odbc-driver-name は ODBC ドライバ名です。SQL Anywhere 11 データベースの場合、odbc-driver-name は SQL Anywhere 11 です。Ultra Light データベースの場合、odbc-driver-name は Ultra Light 11 です。

備考

INPUT 文を使用すると、指定したデータベース・テーブルの中に効率よく大量に挿入できます。入力行は、入力ウィンドウを使用してユーザが入力するか (PROMPT を指定した場合)、またはファイルから読み込まれます (FROM filename を指定した場合)。どちらも指定しない場合は、INPUT 文を含むコマンド・ファイルから入力が読み込まれます。Interactive SQL の場合は、[SQL 文] ウィンドウ枠から直接読み込むこともできます。

[SQL 文] ウィンドウ枠から入力を直接読み取る場合、INPUT 文の末尾にレコードを挿入するレコード値の前に、セミコロンを指定する必要があります。次に例を示します。

INPUT INTO Owner.TableName;
value1, value2, value3
value1, value2, value3
value1, value2, value3
value1, value2, value3
END;

END 文は、ファイル名が指定されておらず、PROMPT キーワードを含まない INPUT 文のデータを終了します。

カラム・リストを指定すると、目的のテーブルの指定したカラムにデータが挿入されます。デフォルトでは、INPUT 文は、入力ファイルのカラムの値がデータベース・テーブル定義の中と同じ順序で表示されるものと見なします。入力ファイルのカラムの順序が異なる場合は、INPUT 文の末尾に実際のカラムの順序をリストしてください。

たとえば、次の文を使用してテーブルを作成するとします。

CREATE TABLE inventory (
Quantity INTEGER,
item VARCHAR(60)
);

また、quantity 値の前に name 値がある入力ファイル stock.txt から TEXT データをインポートするとします。

'Shirts', 100
'Shorts', 60

この場合は、データが適切に挿入されるように、INPUT 文の末尾に入力ファイルの実際のカラム順序をリストします。

INPUT INTO inventory
FROM stock.txt
FORMAT TEXT
(item, Quantity);

デフォルトでは、INPUT 文は、エラーの原因となるローを挿入しようとすると停止します。on_error と conversion_error オプションを設定すると、さまざまな方法でエラーを処理することができます (「SET OPTION 文」を参照してください)。文字列値が INPUT 上でトランケートされる場合、Interactive SQL は [メッセージ] タブに警告を表示します。NOT NULL カラムで値が見つからない場合、数値型カラムは 0 に設定され、数値型でないカラムは空の文字列に設定されます。INPUT は NULL のローを挿入しようとすると、入力ファイルには空のローができます。

INPUT 文は Interactive SQL コマンドなので、複合文 (IF など) やストアド・プロシージャには使用できません。

プロシージャ、トリガ、イベント、バッチで使用できる文を参照してください。

パーミッション

テーブルまたはビューに対する INSERT パーミッションが必要です。

関連する動作

なし

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

次は、TEXT ファイルからの INPUT 文の例です。

INPUT INTO Employees
FROM new_emp.inp
FORMAT TEXT;

次の架空の例は、テーブル ulTest をテーブル saTest にコピーします。ulTest は Ultra Light データベースのファイル C:\test\myULDatabase.udb 内のテーブルです。saTest は demo.db に作成されたテーブルです。

INPUT USING 'driver=Ultralite 11;dbf=C:\\test\\myULDatabase.udb'
            FROM "ulTest" INTO "saTest";