Mit diesem Befehl werden Daten aus einer externen Datei, einer ODBC-Datenquelle, einer Formdatei oder über Tastatureingaben in eine Datenbanktabelle importiert.
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 Listen Sie die Namen der Spalten in der Tabelle in der Reihenfolge auf, die der Reihenfolge der Werte in der Eingabedatei entspricht. Verwenden Sie diesen Parameter, wenn die Reihenfolge der Spalten der Tabelle nicht mit der Reihenfolge der Werte in der Eingabedatei übereinstimmt oder wenn die Eingabedatei weniger Spalten enthält als die Tabelle.
BYTE ORDER MARK-Klausel Verwenden Sie diese Klausel, um anzugeben, ob eine BOM (Byte Order Mark - Bytereihenfolgemarkierung) in der Eingabedatei 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 ENCODING-Klausel nicht angegeben ist:
COLUMN WIDTHS-Klausel Die COLUMN WIDTHS-Klausel legt die Breite der Spalten in der Eingabedatei fest und kann nur im FIXED-Format angegeben werden. 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 zwischen Spaltenwerten im TEXT-Eingabeformat verwendet werden soll. Das Standardtrennzeichen ist ein Komma.
ENCODING-Klausel Das Argument encoding gibt die Kodierung an, mit der die Datei gelesen werden soll. Die ENCODING-Klausel kann nur in den Formaten TEXT und SHAPEFILE verwendet werden.
Wenn Sie Interactive SQL ausführen, wird die beim Importieren der Daten verwendete Kodierung in der folgenden Reihenfolge ermittelt:
Die durch die ENCODING-Klausel angegebene Kodierung (sofern diese Klausel angegeben ist).
Die durch die Option "default_isql_encoding" angegebene Kodierung (sofern diese Option festgelegt wurde).
Wenn die Datei hat eine BOM (Byte-Order Mark) hat, wird die entsprechenden Unicodekodierung verwendet.
Die Standardkodierung für den Computer, den Sie verwenden. Auf Computern mit englischem Windows ist die Standardkodierung 1252 oder 850.
Wenn die Eingabedatei mit der OUTPUT-Anweisung erstellt und eine Kodierung angegeben wurde, muss dieselbe ENCODING-Klausel in der INPUT-Anweisung angegeben werden.
ESCAPE CHARACTER-Klausel Das standardmäßige Escape-Zeichen für hexadezimale Codes 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 Escape-Zeichen 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 Verwenden Sie die FORMAT-Klausel, um das Format der Eingabedatei anzugeben.
Wenn die FORMAT-Klausel nicht angegeben ist, legt die input_ format-Option das Format fest. Die Standardeinstellung ist TEXT. Sie können auch das Eingabeformat in Interactive SQL angeben, indem Sie Extras » Optionen » Import/Export auswählen und im Feld Standard-Importformat entweder Text oder Feste Breite angeben.
Die unterstützten Formate sind folgende:
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.
Ausgelassene Werte werden 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 die entsprechende Datenbankspalte zulässig sind.
Das FIXED-Format kann nicht für Binärspalten verwendet werden, die eingebettete Sequenzen von Zeilenendmarken und Datei-Ende-Zeichen enthalten.
SHAPEFILE Die Eingabe erfolgt in Form einer ESRI-Formdatei. Anders als die LOAD-Anweisung muss sich die Formdatei beim Laden von Formdateien mit der INPUT-Anweisung auf dem Clientcomputer befinden. Die zugeordneten .shx- und .dbf-Dateien müssen sich in demselben Verzeichnis befinden wie die .shp-Datei und denselben Basisdateinamen aufweisen.
Wenn beim Laden einer Formdatei keine Kodierung angegeben ist, lautet der Standardwert ISO-8859-1.
Verwenden Sie die SRID-Klausel, um eine SRID anzugeben, die den Geometrien zugeordnet werden soll. Wenn Sie keine SRID angeben, wird standardmäßig SRID 0 verwendet. Idealerweise sollten Sie dieselbe SRID wie diejenige angeben, die in der Projektdatei (.prj) für die Formdatei angegeben ist. Wenn diese SRID nicht verfügbar ist, verwenden Sie eine gleichwertige. SQL Anywhere bietet Tausende SRIDs, die Sie mithilfe der sa_install_ feature-Systemprozedur der Datenbank hinzufügen können.
Wenn Sie andere Formate verwenden möchten, z.B. DBASE II, DBASE III, FoxPro, Lotus 123 oder Excel 97, müssen Sie INPUT USING verwenden.
FROM filename-Klausel Der filename kann mit oder ohne Apostrophe angegeben werden. Wenn die Zeichenfolge in Apostrophen steht, unterliegt sie denselben Formatierungsanforderungen wie andere SQL-Zeichenfolgen.
Beim Angeben von Verzeichnispfaden muss das Backslashzeichen (\) durch zwei Backslashes dargestellt werden.
Der Speicherort eines relativen filename wird wie folgt ermittelt:
Wenn die INPUT-Anweisung direkt in Interactive SQL ausgeführt wird, berechnet sich der Pfad von filename 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 GROUPO.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 filename relativ zum Speicherort der Datei aufzulösen. Wenn dies nicht gelingt, sucht Interactive SQL nach filename 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 GROUPO.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 source-table-name-Klausel
Der source-table-name-Parameter ist eine Zeichenfolge in Anführungszeichen, die den Namen der Tabelle in der Quelldatenbank enthält. Der Name kann
im Format database-name.owner.table-name, owner.table-name oder table-name 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 source-table-name database..table (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.
SKIP-Klausel Beim Einfügen von Zeilen aus einer TEXT-Datei lässt die SKIP-Klausel die angegebene Anzahl an Zeilen weg, beginnend am Anfang der Datei. Die angegebene Zahl muss eine nicht-negative Ganzzahl sein. Die SKIP-Klausel QUOTE gilt nur für das TEXT-Format.
Wenn die angegebene Zeilenanzahl die Anzahl der Zeilen in der Datei überschreitet, fügt die INPUT-Anweisung keine Daten ein und es wird kein Fehler zurückgegeben.
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. Der Parameter connection-parameter ist eine Liste von datenbankspezifischen Verbindungsparametern.
Der Parameter odbc-data-source ist der Name eines Benutzers oder der ODBC-Datenquellenname. Beispiel: odbc-data-source ist für die SQL Anywhere-Beispieldatenbank "SQL Anywhere 16 Demo".
Der Parameter odbc-driver-name ist der ODBC-Treibername. Für eine SQL Anywhere-Datenbank ist odbc-driver-name SQL Anywhere 16. Für eine UltraLite-Datenbank ist odbc-driver-name UltraLite 16.
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 filename angegeben ist). Wenn keine der beiden Angaben festgelegt ist, wird die Eingabe aus der SQL-Skriptdatei gelesen, die die INPUT-Anweisung enthält. In Interactive SQL kann dies sogar direkt im Fensterausschnitt SQL-Anweisungen erfolgen. In diesem Fall wird die Eingabe mit einer Zeile beendet, die lediglich die Zeichenfolge END enthält.
Wenn die Eingabe direkt aus dem Fensterausschnitt SQL-Anweisungen gelesen wird, müssen Sie ein Semikolon vor den Werten angeben, damit die Datensätze am Ende der INPUT-Anweisung eingefügt werden. Beispiel:
INPUT INTO Owner.TableName; value1, value2, value3 value1, value2, value3 value1, value2, value3 value1, value2, value3 END |
Das END-Schlüsselwort (nicht ein Semikolon) 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 Spaltenreihenfolge in der Tabelle anders ist, müssen Sie den Parameter column-name verwenden, um die Tabellenspalten in derselben Reihenfolge aufzulisten wie die Spaltenwerte in der Eingabedatei.
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.
Interactive SQL gibt eine Warnung auf der Registerkarte 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 Anweisungen verwendet werden, die vom Server ausgeführt werden.
Sie müssen Eigentümer der Tabelle sein, das INSERT ANY TABLE-Systemprivileg haben oder das INSERT-Privileg für die Tabelle haben. Außerdem müssen Sie das SELECT ANY TABLE-Systemprivileg oder das SELECT-Privileg für die Tabelle haben.
Keine.
SQL/2008 Erweiterung des Herstellers.
In diesem Beispiel werden Daten aus einer fiktiven TEXT-Datei, new_emp.inp, in die Tabelle "Employees" importiert:
INPUT INTO GROUPO.Employees FROM new_emp.inp FORMAT TEXT; |
In diesem Beispiel wird die Tabelle "ulTest" in eine Tabelle namens saTest kopiert. Die ulTest-Tabelle befindet sich in einer UltraLite-Datenbank in der Datei C:\test\myULDatabase.udb und die saTest-Tabelle wird in demo.db erstellt:
INPUT USING 'driver=UltraLite 16;dbf=C:\\test\\myULDatabase.udb' FROM "ulTest" INTO "saTest"; |
In diesem Beispiel wird die Formdatei myshapefile.shp in die Tabelle "myTable" geladen und den Geometrien in der Formdatei wird die SRID 4269 zugeordnet.
INPUT INTO myTable FROM 'myshapefile.shp' FORMAT SHAPEFILE SRID 4269 |
In diesem Beispiel wird eine neue Zeile zur Tabelle "Products" hinzugefügt und der Benutzer wird aufgefordert, die Werte für die einzelnen Spalten einzugeben.
INPUT INTO GROUPO.Products PROMPT; |
In diesem Beispiel werden Daten aus der Datei c:\temp\input.dat in die Tabelle "Employees" geladen. Beachten Sie die verdoppelten Backslashes.
INPUT INTO GROUPO.Employees FROM 'c:\\temp\\input.dat'; |
Im folgenden Beispiel wird eine Tabelle namens myInventory erstellt und Daten werden aus der Datei stock.txt importiert, die die Daten enthält, jedoch in anderer Spaltenreihenfolge als die Tabellendefinition. Um die nicht übereinstimmende Reihenfolge zu korrigieren, wird die richtige Spaltenreihenfolge für den Import durch den Parameter column-name angegeben, der in der INPUT-Anweisung auf den Tabellennamen folgt. Mit (item, Quantity) wird Interactive SQL also angewiesen, den ersten Spaltenwert aus der Eingabedatei in die zweite Spalte der Tabelle einzufügen und anschließend den zweiten Spaltenwert aus der Eingabedatei in die erste Spalte der Tabelle einzufügen.
CREATE TABLE myInventory ( Quantity INTEGER, item VARCHAR(60) ); INPUT INTO myInventory (item, Quantity) FROM stock.txt; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |