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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (E-O)

 

INPUT-Anweisung [Interactive SQL]

Verwenden Sie diese Anweisung, um Daten aus einer externen Datei oder über Tastatureingaben bzw. aus einer allgemeinen ODBC-Datenquelle in eine Datenbanktabelle zu importieren.

Syntax 1 - Aus einer externen Datei oder über Tastatureingaben importieren
INPUT INTO [ Eigentümer.]Tabellenname Eingabeoptionen
Eingabeoptionen :
[ ( Spaltenname, ... ) ]
[ BY { ORDER | NAME ]
[ BYTE ORDER MARK { ON | OFF }
[ COLUMN WIDTHS ( Ganzzahl, ...) ]
[ DELIMITED BY Zeichenfolge ]
[ ENCODING Kodierung ]
[ ESCAPE CHARACTER Zeichen ]
[ ESCAPES { ON | OFF }
[ FORMAT Eingabeformat ]
[ FROM Dateiname | PROMPT ]
[ NOSTRIP ]
Eingabeformat :
TEXT 
| FIXED
Kodierung : Bezeichner oder Zeichenfolge
Syntax 2 - Von einer ODBC-Datenquelle importieren
INPUT  
USING Verbindungszeichenfolge
FROM Quelltabellenname 
INTO Zieltabellenname
[ CREATE TABLE { ON | OFF } ]
Verbindungszeichenfolge :  
{ DRIVER=ODBC-Treibername 
| DSN=ODBC-Datenquelle } [ ; { Verbindungsparameter = Wert } ]
Parameter
  • BY-Klausel   Mit der BY-Klausel kann der Benutzer angeben, ob die Spalten in der Eingabedatei den Tabellenspalten auf der Grundlage ihrer Ordinalposition in der Liste (ORDER, der Standardwert) oder ihrer Namen (NAME) zugeordnet werden sollen. Nicht alle Eingabeformate haben Spaltennamenangaben in der Datei. NAME ist nur für die Formate zulässig, die diese Angaben enthalten.

  • BYTE ORDER MARK-Klausel   Verwenden Sie diese Klausel, um anzugeben, ob eine Byte Order Mark (BOM) in den Daten verarbeitet werden soll.

    Die BYTE ORDER MARK-Klausel ist nur relevant, wenn das Einlesen aus Dateien im Textformat erfolgt. Wenn Sie versuchen, die BYTE ORDER MARK-Klausel mit anderen FORMAT-Klauseln als TEXT zu verbinden, wird ein Fehler zurückgegeben.

    Die BYTE ORDER MARK-Klausel wird nur verwendet, wenn Dateien gelesen oder geschrieben werden, die mit UTF-8 oder UTF-16 (und ihren Varianten) kodiert sind. Wenn Sie versuchen, die BYTE ORDER MARK-Klausel mit anderen Kodierungen zu verbinden, wird ein Fehler zurückgegeben.

    Wenn die ENCODING-Klausel angegeben ist:

    • Wenn die BYTE ORDER MARK-Option ON ist und Sie eine UTF-16-Kodierung mit Endian wie UTF-16BE oder UTF-16LE angeben, sucht Interactive SQL nach einer BOM am Beginn der Daten. Wenn eine BOM vorhanden ist, wird sie benutzt, um den Endian der Daten zu prüfen. Wenn Sie den falschen Endian angeben, wird ein Fehler zurückgegeben.
    • Wenn die BYTE ORDER MARK-Option ON ist und Sie eine UTF-16-Kodierung ohne expliziten Endian angegeben haben, sucht Interactive SQL nach einer BOM am Beginn der Daten. Wenn eine BOM vorhanden ist, wird sie benutzt, um den Endian der Daten zu bestimmen. Sonst wird der Endian des Betriebssystems angenommen.
    • Wenn die BYTE ORDER MARK-Option ON ist und Sie eine UTF-8-Kodierung angegeben haben, sucht Interactive SQL nach einer BOM am Beginn der Daten. Wenn eine BOM vorhanden ist, wird sie ignoriert.

    Wenn die ENCODING-Klausel nicht angegeben ist:

    • Wenn Sie keine ENCODING-Klausel angeben und die BYTE ORDER MARK-Option ON ist, sucht Interactive SQL nach einer BOM am Beginn der Eingabedaten. Wenn es eine BOM findet, wird die Quellkodierung basierend auf der Kodierung der BOM (UTF-16BE, UTF-16LE oder UTF-8) automatisch gewählt und die BOM wird nicht als Teil der zu ladenden Daten angesehen.
    • Wenn Sie keine ENCODING-Klausel angeben und die BYTE ORDER MARK-Option OFF ist oder keine BOM am Beginn der Eingabedaten gefunden wird, verwendet Interactive SQL die CHAR-Kodierung.

  • COLUMN WIDTHS-Klausel   COLUMN WIDTHS kann nur für FIXED-Format verwendet werden. Hier wird die Spaltenbreite in der Eingabedatei angegeben. Wenn COLUMN WIDTHS nicht angegeben ist, wird die Breite von den Datenbank-Spaltentypen bestimmt.

  • CREATE TABLE-Klausel   Verwenden Sie die CREATE TABLE-Klausel, um anzugeben, ob die Zieltabelle erstellt werden soll, wenn sie nicht existiert. Der Standardwert ist ON.

  • DELIMITED BY-Klausel   Mit der DELIMITED BY-Klausel können Sie eine Zeichenfolge angeben, die als Begrenzer im TEXT-Eingabeformat verwendet werden soll. Das Standardtrennzeichen ist ein Komma.

  • ENCODING-Klausel   Mit dem Argument Kodierung können Sie die Kodierung angeben, mit der die Datei gelesen werden soll. Die ENCODING-Klausel kann nur im TEXT-Format verwendet werden.

    Weitere Hinweise zum Bezug der Liste der von SQL Anywhere unterstützten Kodierungen finden Sie unter Unterstützte Zeichensätze.

    Wenn in Interactive SQL Kodierung nicht angegeben ist, wird die Kodierung, die für das Lesen der Datei verwendet wird, in der folgenden Reihenfolge ermittelt:

    • Anhand der Kodierung, die mit der Option default_isql_encoding angegeben ist (falls diese Option festgelegt wurde).

    • Anhand der Standardkodierung des Zeichensatzes des Betriebssystems auf dem Computer, auf dem Interactive SQL läuft.

    Wenn die Eingabedatei mit der OUTPUT-Anweisung erstellt und eine Kodierung angegeben wurde, muss dieselbe ENCODING-Klausel in der INPUT-Anweisung angegeben werden.

    Weitere Hinweise zu Interactive SQL und Kodierungen finden Sie unter default_isql_encoding-Option [Interactive SQL].

    Geben Sie die BYTE ORDER-Klausel an, um eine BOM (Byte Order Mark) in die Daten einzubeziehen.

  • ESCAPE CHARACTER-Klausel   Das Standard-Escapezeichen für hexadezimale Codes und Symbole ist ein Backslash (\). Beispielsweise ist \x0A das Zeilenvorschubzeichen.

    Die Zeilenendmarke kann als \n eingegeben werden. Andere Zeichen können mit hexadezimalen ASCII-Codes angegeben werden, wie etwa \x09 für das Tabulatorzeichen. Eine Sequenz von zwei Backslashes ( \\ ) wird als ein einzelner Backslash interpretiert. Ein Backslash gefolgt von einem beliebigen Zeichen außer n, x, X oder \ wird als zwei separate Zeichen interpretiert. Zum Beispiel wird \q als Backslash mit dem Buchstaben q intepretiert.

    Das Escapezeichen kann mit der ESCAPE CHARACTER-Klausel verändert werden. Wenn Sie beispielsweise das Ausrufezeichen als Escapezeichen verwenden möchten, geben Sie Folgendes ein:

    ... ESCAPE CHARACTER '!'

  • ESCAPES-Klausel   Wenn ESCAPES aktiviert ist (Standardwert), werden die Zeichen, die auf das Escapezeichen folgen, vom Datenbankserver als Sonderzeichen interpretiert. Wenn ESCAPES deaktiviert ist, werden die Zeichen genauso gelesen, wie sie in der Quelle erscheinen.

  • FORMAT-Klausel   Mit der FORMAT-Klausel können Sie das Dateiformat für die Ausgabe angeben.

    Wenn die FORMAT-Klausel nicht angegeben ist, muss jede Wertmenge im Format sein, das von der Interactive SQL SET OPTION Eingabeformat-Anweisung festgelegt wurde.

    Die Eingabe aus einer Befehlsdatei wird mit einer Zeile beendet, die END enthält. Die Eingabe aus einer Datei wird mit dem Ende der Datei beendet.

    Zulässige Eingabeformate sind die folgenden:

    • TEXT   Eingabezeilen werden als Zeichen vorausgesetzt, eine Zeile pro Ausgabezeile, wobei die Spaltenwerte durch Trennzeichen voneinander getrennt werden. Alphabetische Zeichenfolgen können in Apostrophe oder Anführungszeichen eingeschlossen werden. Zeichenfolgen, die Trennzeichen enthalten, müssen in Apostrophe oder Anführungszeichen gesetzt werden. Wenn die Zeichenfolge selbst Apostrophe oder Anführungszeichen enthält, müssen Sie die Anführungszeichen oder Apostrophe verdoppeln, um sie innerhalb der Zeichenfolge zu verwenden. Sie können auch die DELIMITED BY-Klausel verwenden, um ein anderes Trennzeichen als das standardmäßige Komma anzugeben.

      Drei weitere spezielle Sequenzen werden ebenfalls erkannt. Die beiden Zeichen \n stellen eine Zeilenendmarke dar, \\ stellt einen einzelnen \ und die Sequenz \xDD stellt das Zeichen mit dem Hexadezimalcode DD dar.

      Wenn die Datei Einträge enthält, die anzeigen, dass ein Wert Null sein könnte, wird sie als NULL behandelt. Wenn der Wert in dieser Position nicht NULL sein kann, wird eine 0 in nummerische Spalten und eine leere Zeichenfolge in Zeichenspalten eingefügt.

    • FIXED   Eingabezeilen sind im festen Format. Die Spaltenbreite kann mit der COLUMN WIDTHS-Klausel angegeben werden. Wenn sie nicht angegeben werden, müssen die Spaltenbreiten in der Datei der maximalen Anzahl der Zeichen entsprechen, die für alle Werte des Typs der entsprechenden Datenbank-Spalte erforderlich sind.

      Das FIXED-Format kann nicht für Binärspalten verwendet werden, die eingebettete Sequenzen von Zeilenendmarken und Datei-Ende-Zeichen enthalten.

    Wenn Sie andere Formate wie DBASEII, DBASE III, FoxPro, Lotus 123 oder Excel 97 verwenden möchten, müssen Sie INPUT USING verwenden.

  • FROM Dateiname-Klausel   Der Dateiname kann mit oder ohne Apostrophe angegeben werden. Wenn die Zeichenfolge in Apostrophen steht, unterliegt sie denselben Formatierungsanforderungen wie andere SQL-Zeichenfolgen.

    Bei Angabe des Verzeichnissuchpfads muss das Backslashzeichen (\) durch zwei Backslashes dargestellt werden. Die Anweisung zum Laden der Daten aus der Datei c:\temp\input.dat in die Tabelle Employees lautet wie folgt:

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

    Der Speicherort eines relativen Dateinamens wird wie folgt ermittelt:

    • Wenn die INPUT-Anweisung direkt in Interactive SQL ausgeführt wird, berechnet sich der Pfad von Dateiname relativ zum Verzeichnis, in dem Interactive SQL läuft. Beispiel: Angenommen, Sie öffnen Interactive SQL aus dem Verzeichnis c:\work und führen folgende Anweisung aus:

      INPUT INTO Employees
       FROM 'inputs\\inputfile.dat';

      Interactive SQL sucht nach c:\work\inputs\inputfile.dat.

    • Wenn die INPUT-Anweisung in einer .sql liegt, versucht Interactive SQL erst, den Pfad zu Dateiname relativ zum Speicherort der Datei aufzulösen. Wenn dies nicht gelingt, sucht Interactive SQL nach Dateiname in einem Pfad, der relativ zu dem Verzeichnis liegt, in dem Interactive SQL läuft.

      Beispiel: Angenommen, Sie haben eine Datei c:\homework\inputs.sql, die folgende Anweisung enthält:

      INPUT INTO Employees
       FROM 'inputs\\inputfile.dat';

      Interactive SQL sucht erst nach inputfile.dat in c:\homework\inputs. Wenn Interactive SQL inputfile.dat an diesem Speicherort nicht findet, sucht Interactive SQL in dem Verzeichnis, in dem Interactive SQL läuft.

  • FROM Quelltabellenname-Klausel   Der Quelltabellenname-Parameter ist eine Zeichenfolge in Anführungszeichen, die den Namen der Tabelle in der Quelldatenbank enthält. Der Name kann im Format Datenbankname.Eigentümer.Tabellenname, Eigentümer.Tabellenname oder einfach Tabellenname angegeben werden. Verwenden Sie einen Punkt, um die Komponenten voneinander zu trennen, auch wenn dies nicht das systemeigene Trennzeichen in der Quelldatenbank ist. Wenn die Quelldatenbank einen Datenbanknamen, aber keinen Eigentümernamen verlangt, ist das Format von Quelltabellenname Datenbank..Tabelle (in diesem Fall ist der Eigentümername leer). Setzen Sie die Namen im Parameter nicht in Anführungszeichen (Beispiel: Verwenden Sie nicht 'dba."my-table"', sondern 'dba.my-table').

  • INTO-Klausel   Der Name der Tabelle, in der die Daten einzugeben sind.

  • PROMPT-Klausel   Die PROMPT-Klausel ermöglicht dem Benutzer, Werte für jede Spalte in eine Zeile einzugeben. Wenn sie im Befehlsfenstermodus ausgeführt wird, erscheint ein Fenster, in das der Benutzer die Werte für eine neue Zeile eingeben kann. Wenn Sie Interactive SQL von der Befehlszeile ausführen, fordert Interactive SQL Sie auf, den Wert für jede Spalte in die Befehlszeile einzugeben.

  • NOSTRIP-Klausel   Normalerweise werden für das TEXT-Eingabeformat nachgestellte Leerzeichen aus nicht mit Anführungszeichen versehenen Zeichenfolgen entfernt, bevor der Wert eingefügt wird. NOSTRIP kann verwendet werden, um die Entfernung der nachgestellten Leerzeichen zu unterdrücken. Nachgestellte Leerzeichen werden nicht aus mit Anführungszeichen versehenen Zeichenfolgen entfernt, unabhängig davon, ob die Option verwendet wird oder nicht. Führende Leerzeichen werden unabhängig von der Einstellung der Option NOSTRIP aus nicht mit Anführungszeichen versehenen Zeichenfolgen entfernt.

  • USING-Klausel   Die USING-Klausel gibt Daten von einer ODBC-Datenquelle ein. Sie können entweder den ODBC-Datenquellennamen mit der DSN-Option oder den ODBC-Treibernamen und den Verbindungsparameter mit der DRIVER-Option angeben. Verbindungsparameter: Eine optionale Liste von datenbankspezifischen Verbindungsparametern.

    ODBC-Datenquelle ist der Name eines Benutzers oder der ODBC-Datenquellenname. Beispiel: ODBC-Datenquelle für die SQL Anywhere-Demo-Datenbank ist SQL Anywhere 11 Demo.

    ODBC-Treibername ist der ODBC-Treibername. Für eine SQL Anywhere 11-Datenbank ist der ODBC-Treibername SQL Anywhere 11, für eine UltraLite-Datenbank ist der ODBC-Treibername UltraLite 11.

Bemerkungen

Mit der INPUT-Anweisung können effiziente Einfügungen großer Datenmengen in die genannte Datenbanktabelle vorgenommen werden. Eingabezeilen werden entweder vom Benutzer über das Eingabefenster eingelesen (wenn PROMPT angegeben ist), oder von einer Datei (wenn ein FROM Dateiname angegeben ist). Wenn keine der beiden Angaben festgelegt sind, wird die Eingabe aus der Befehlsdatei gelesen, welche die INPUT-Anweisung enthält. In Interactive SQL kann dies sogar direkt im Fensterausschnitt für Interactive SQL-Anweisungen erfolgen.

Wenn die Eingabe direkt vom SQL-Anweisungsfenster gelesen wird, müssen Sie ein Semikolon vor den Werten angeben, damit die Datensätze am Ende der INPUT-Anweisung eingefügt werden. Zum Beispiel:

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

Die END-Anweisung schließt Daten bei INPUT-Anweisungen ab, die keine Datei benennen und nicht das PROMPT-Schlüsselwort enthalten.

Wenn eine Spaltenliste angegeben wird, ist die Folge, dass die Daten in die angegebenen Spalten der benannten Tabelle eingefügt werden. Standardmäßig geht die INPUT-Anweisung davon aus, dass Spaltenwerte in der Eingabedatei in derselben Reihenfolge erscheinen wie in der Datenbanktabellendefinition. Wenn die Spaltenfolge in der Eingabedatei davon abweicht, müssen Sie am Ende der INPUT-Anweisung die tatsächliche Spaltenfolge auflisten.

Sie erstellen z.B. mit der folgenden Anweisung eine Tabelle:

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

Sie wollen TEXT-Daten aus der Eingabedatei stock.txt importieren, die den Wert name vor dem Wert quantity enthält.

'Shirts', 100
'Shorts', 60

In diesem Fall müssen Sie die tatsächliche Spaltenfolge der Eingabedatei am Ende der INPUT-Anweisung angeben, damit die Daten korrekt eingelesen werden:

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

Standardmäßig stoppt die INPUT-Anweisung, wenn sie versucht, eine Zeile einzufügen, die einen Fehler verursacht. Es gibt verschiedene Möglichkeiten, Fehler zu behandeln, indem die Optionen on_error und conversion_error eingestellt werden (siehe SET OPTION-Anweisung). Interactive SQL gibt eine Warnung im Register "Meldungen" aus, wenn Zeichenfolgenwerte bei der Eingabe mit INPUT gekürzt werden. Fehlende Werte für NOT NULL-Spalten werden für nummerische Typen auf Null gesetzt und für nicht-nummerische Typen auf die leere Zeichenfolge. Wenn INPUT versucht, einen NULL-Zeile einzufügen, enthält die Eingabedatei eine leere Zeile.

Da die INPUT-Anweisung ein Interactive SQL-Befehl ist, kann sie nicht in zusammengesetzten Anweisungen (wie IF) oder in gespeicherten Prozeduren verwendet werden.

Weitere Hinweise finden Sie unter Zulässige Anweisungen in Prozeduren, Triggern, Ereignissen und Batches.

Berechtigungen

INSERT-Berechtigung für die Tabelle oder die Ansicht erforderlich

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Erweiterung des Herstellers

Beispiel

Das folgende Beispiel veranschaulicht eine INPUT-Anweisung aus einer TEXT-Datei.

INPUT INTO Employees
FROM new_emp.inp
FORMAT TEXT;

Das folgende erfundene Beispiel kopiert die Tabelle ulTest in eine Tabelle saTest. ulTest ist eine Tabelle in einer UltraLite-Datenbank in der Datei C:\test\myULDatabase.udb und saTest ist eine in der demo.db erstellte Tabelle:

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