Importiert Massendaten aus einer externen Datei in eine Datenbanktabelle.
LOAD [ INTO ] TABLE [ owner.]table-name [ ( column-name, ... ) ] load-source [ load-option ... ] [ statistics-limitation-option ]
load-source : { FROM filename-expression | USING FILE filename-expression | USING CLIENT FILE client-filename-expression | USING VALUE value-expression | USING COLUMN column-expression }
filename-expression : string | variable
client-filename-expression : string | variable
value-expression : expression
column-expression : column-name FROM table-name ORDER BY column-list
load-option : BYTE ORDER MARK { ON | OFF } | CHECK CONSTRAINTS { ON | OFF } | { COMPRESSED | AUTO COMPRESSED | NOT COMPRESSED } | { ENCRYPTED KEY 'key' | NOT ENCRYPTED } | COMMENTS INTRODUCED BY comment-prefix | COMPUTES { ON | OFF } | DEFAULTS { ON | OFF } | DELIMITED BY string | ENCODING encoding | ESCAPE CHARACTER character | ESCAPES { ON | OFF } | FORMAT { TEXT | BCP | XML row-xpath ( column-xpath,... ) [ NAMESPACES namespace ] } | SHAPEFILE | HEXADECIMAL { ON | OFF } | ORDER { ON | OFF } | PCTFREE percent-free-space | QUOTE string | QUOTES { ON | OFF } | ROW DELIMITED BY string | SKIP integer | STRIP { ON | OFF | LTRIM | RTRIM | BOTH } | WITH CHECKPOINT { ON | OFF } | WITH { FILE NAME | ROW | CONTENT } LOGGING
statistics-limitation-option : STATISTICS { ON [ ALL COLUMNS ] | ON KEY COLUMNS | ON ( column-list ) | OFF }
comment-prefix : string
encoding : string
column-name Mit dieser Klausel geben Sie eine oder mehrere Spalten an, in die Daten geladen werden sollen. Alle nicht in der Spaltenliste vorhandenen Spalten werden NULL, wenn DEFAULTS auf OFF gesetzt ist. Wenn DEFAULTS auf ON gesetzt ist und die Spalte einen Standardwert hat, wird dieser Wert benutzt. Wenn DEFAULTS auf OFF gesetzt ist und eine nicht nullwertfähige Spalte aus der Spaltenliste ausgelassen wird, versucht der Datenbankserver, die leere Zeichenfolge in den Datentyp der Spalte zu konvertieren.
Wenn eine Spaltenliste angegeben ist, werden die in der Datei erwarteten Spalten sowie die Reihenfolge, in der sie erwartungsgemäß erscheinen werden, aufgelistet. Spaltennamen können nicht wiederholt werden. Spalten, deren Namen nicht in der Liste erscheinen, werden auf NULL/null/leer oder DEFAULT gesetzt (abhängig von der Nullwertfähigkeit der Spalte, vom Datentyp und der DEFAULTS-Einstellung). Spalten, die in der Eingabedatei existieren und von LOAD TABLE ignoriert werden sollen, können mit dem Spaltennamen filler() angegeben werden.
load-source Verwenden Sie diese Klausel, um die Datenquelle anzugeben, aus der die Daten geladen werden sollen. Es gibt mehrere Datenquellen, aus denen Daten geladen werden können. Die folgende Liste enthält die unterstützten Ladequellen:
FROM-Klausel Verwenden Sie diese Klausel, um eine Datei anzugeben. Der filename-expression wird an die Datenbank als Zeichenfolge übergeben. Die Zeichenfolge unterliegt daher denselben Formatierungsanforderungen für die Datenbank wie auch andere SQL-Zeichenfolgen. Speziell sind folgende Punkte zu beachten:
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:
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' ... |
Der Pfadname ist relativ zum Datenbankserver, nicht aber zur Clientanwendung.
Sie können eine UNC-Pfadangabe verwenden, um Daten aus Dateien von anderen Computern als dem Datenbankserver zu laden.
USING FILE-Klausel Verwenden Sie diese Klausel, um Daten aus einer Datei zu laden. Dies ist synonym mit Angabe der FROM filename-Klausel.
Wenn die LOAD TABLE-Anweisung mit der USING FILE-Klausel verwendet wird, können Sie Meldungen zum Verarbeitungsfortschritt anfordern.
Sie können auch mithilfe der Verbindungseigenschaft "Progress" feststellen, wie viel von der Anweisung ausgeführt wurde.
USING CLIENT FILE-Klausel Verwenden Sie diese Klausel, um Daten aus einer Datei auf dem Clientsystem zu laden. Wenn der Datenbankserver Daten aus client-filename-expression bezieht, werden die Daten im Speicher des Servers nicht materialisiert. Daher gilt die Begrenzung des Datenbankservers für die Größe von Blob-Ausdrücken nicht für die Datei. Die Clientdatei kann daher jede beliebige Größe haben.
Dateinamenprotokollierung ist nicht zulässig, wenn die Tabelle aus einer Clientdatei geladen wird. Wenn der Protokollierungstyp nicht angegeben ist, wird WITH CONTENT LOGGING verwendet.
Wenn die LOAD TABLE-Anweisung mit der USING CLIENT FILE-Klausel verwendet wird, können Sie Meldungen zum Verarbeitungsfortschritt anfordern.
Sie können auch mithilfe der Verbindungseigenschaft "Progress" feststellen, wie viel von der Anweisung ausgeführt wurde.
USING VALUE-Klausel Verwenden Sie diese Klausel, um Daten aus einem Ausdruck des Typs CHAR, NCHAR, BINARY oder LONG BINARY bzw. einer BLOB-Zeichenfolge zu laden. Nachstehend finden Sie Beispiele für die Einsatzmöglichkeiten dieser Klausel:
Die folgende Syntax benutzt die xp_read_file-Systemprozedur, um die zu ladenden Werte aus der Zieldatei zu holen:
... USING VALUE xp_read_file( 'filename' )... |
Die folgende Syntax gibt den Wert direkt an, indem zwei Zeilen mit den Werten 4 und 5 eingefügt werden.
... USING VALUE '4\n5'... |
Die folgende Syntax benutzt die Ergebnisse der READ_CLIENT_FILE-Funktion als Wert:
... USING VALUE READ_CLIENT_FILE( client-filename-expression ) |
In diesem Fall können Sie auch USING CLIENT FILE client-filename-expression
angeben, da dies semantisch gleichwertig ist.
Wenn die ENCODING-Klausel in der LOAD TABLE-Anweisung nicht angegeben ist, erfolgt das Kodieren von value-expression im Zeichensatz der Datenbank (db_charset), wenn value-expression vom Typ CHAR oder BINARY ist, und im NCHAR-Datenbank-Zeichensatz (nchar_charset), wenn value-expression vom Typ NCHAR ist.
USING COLUMN-Klausel Verwenden Sie diese Klausel, um Daten aus einer einzelnen Spalte in eine andere Tabelle zu laden. Diese Klausel wird vom Datenbankserver benutzt, wenn er das Transaktionslog während der Wiederherstellung abarbeitet, indem die LOAD TABLE...WITH CONTENT LOGGING-Anweisungen neu ausgeführt werden. Die Transaktionslogeinträge für LOAD TABLE...WITH CONTENT LOGGING-Anweisungen enthalten Abschnitte der ursprünglichen Eingabedatei. Wenn ein Datenbankserver bei der Wiederherstellung im Transaktionslog auf diese Abschnitte trifft, lädt er die Teile in eine temporäre Tabelle und danach alle Daten aus dem ursprünglichen Ladevorgang.
Die folgenden Klauseln sind in der USING COLUMN-Klausel erforderlich:
Tabellenname Der Name der Basistabelle oder temporären Tabelle, die die Spalte enthält, aus der die Daten geladen werden sollen. Wenn diese Tabelle vom Datenbankserver während der Wiederherstellung aus dem Transaktionslog benutzt wird, ist dies die Tabelle, die die Abschnitte der Zeilen enthält, die syntaktisch analysiert und geladen werden sollen.
column-name Der Name der Spalte in column-name, die die zu ladendenden Abschnitte der Zeilen enthält.
column-list Eine oder mehr Spalten in der Zieltabelle, die benutzt werden, um die Zeilen vor dem Laden der Daten zu sortieren. column-list muss eine nachweisbar eindeutige Wertemenge sein, wie z. B. ein Primärschlüssel oder ein eindeutiger Index für nicht-nullwertfähige Spalten, die in der Spaltenliste enthalten sind.
load-option-Klausel Es gibt mehrere Ladeoptionen, mit denen Sie steuern können, wie Daten geladen werden sollen. Die folgende Liste enthält die unterstützten Ladeoptionen:
BYTE ORDER MARK-Klausel Verwenden Sie diese Klausel, um anzugeben, ob der Server eine Byte Order Mark (BOM) am Beginn der Daten suchen und interpretieren soll. Standardmäßig ist diese Option aktiviert. Wenn BYTE ORDER MARK OFF ist, sucht der Server nicht nach einer BOM.
Wenn die ENCODING-Klausel angegeben ist:
Wenn die ENCODING-Klausel nicht angegeben ist:
CHECK CONSTRAINTS-Klausel Verwenden Sie diese Klausel, um zu steuern, ob Integritätsregeln während des Ladens geprüft werden. CHECK CONSTRAINTS ist standardmäßig auf ON gesetzt, das Dienstprogramm Unload (dbunload) schreibt aber LOAD TABLE-Anweisungen mit der Option CHECK CONSTRAINTS auf OFF. Wenn Sie CHECK CONSTRAINTS auf OFF setzen, deaktivieren Sie Prüf-Integritätsregeln, was z.B. während des Datenbank-Neuaufbaus nützlich sein kann. Wenn einer Tabelle Prüf-Integritätsregeln zugeordnet sind, die benutzerdefinierte Funktionen aufrufen, welche noch nicht erstellt wurden, schlägt der Neuaufbau fehl. Dies ist allerdings nicht der Fall, wenn CHECK CONTRAINTS auf OFF gesetzt ist.
COMMENTS INTRODUCED BY-Klausel Mit dieser Klausel können Sie die Zeichenfolge angeben, die in der Datendatei verwendet wird, um einen Kommentar einzuleiten. Wird diese Option verwendet, ignoriert LOAD TABLE jede Zeile, die mit der Zeichenfolge comment-prefix beginnt. Beispiel: In der folgenden Anweisung werden Zeilen in input.dat ignoriert, die mit // beginnen.
LOAD TABLE Employees FROM 'c:\\temp\\input.dat' COMMENTS INTRODUCED BY '//' ... |
Kommentare sind nur am Anfang einer neuen Zeile zulässig.
Wenn die COMMENTS INTRODUCED BY-Klausel weggelassen wird, darf die Datendatei keine Kommentare enthalten, weil diese als Daten interpretiert werden.
COMPRESSED-Klausel Geben Sie COMPRESSED an, wenn die zu ladenden Daten in der Eingabedatei komprimiert sind. Der Datenbankserver dekomprimiert die Daten, bevor sie geladen werden. Wenn Sie COMPRESSED angeben und die Daten nicht komprimiert sind, schlägt LOAD fehl und gibt einen Fehler zurück.
Geben Sie AUTO COMPRESSED an, damit der Datenbankserver ermitteln kann, ob die Daten in der Eingabedatei komprimiert sind oder nicht. Wenn dies der Fall ist, dekomprimiert der Datenbankserver die Daten, bevor sie geladen werden.
Geben Sie NOT COMPRESSED an, um anzuzeigen, dass die Daten in der Eingabedatei nicht komprimiert werden. Sie können auch NOT COMPRESSED angeben, wenn die Daten komprimiert sind, Sie aber nicht wollen, dass der Datenbankserver sie entkomprimiert. In diesem Fall bleiben die Daten in der Datenbank komprimiert. Wenn hingegen eine Datei sowohl verschlüsselt als auch komprimiert ist, können Sie NOT ENCRYPTED nicht ohne NOT COMPRESSED verwenden.
COMPUTES-Klausel Standardmäßig ist diese Option ON, damit eine Neuberechnung berechneter Spalten möglich ist. Mit COMPUTES auf OFF werden Neuberechnungen von berechneten Spalten deaktiviert. COMPUTES OFF ist beispielsweise sinnvoll, wenn Sie eine Datenbank neu aufbauen und eine Tabelle eine berechnete Spalte umfasst, die eine noch nicht erstellte benutzerdefinierte Funktion aufruft. Der Neuaufbau würde fehlschlagen, wenn diese Option nicht auf OFF gesetzt ist.
Das Dienstprogramm Unload (dbunload) schreibt LOAD TABLE-Anweisungen mit COMPUTES auf OFF.
DEFAULTS-Klausel Standardmäßig hat DEFAULTS die Einstellung OFF. Wenn DEFAULTS auf OFF gesetzt ist, wird allen Spalten, die in der Spaltenliste nicht vorhanden sind, NULL zugeordnet. Wenn DEFAULTS auf OFF gesetzt ist und eine nicht nullwertfähige Spalte aus der Liste ausgelassen wird, versucht der Datenbankserver, die leere Zeichenfolge in den Datentyp der Spalte zu konvertieren. Wenn DEFAULTS auf ON gesetzt ist und die Spalte einen Standardwert hat, wird dieser Wert benutzt.
DELIMITED BY-Klausel
Verwenden Sie diese Klausel, um die Spaltentrennzeichenfolge anzugeben. Das Standardtrennzeichen für Spalten ist ein
Komma. Sie können jedoch auch eine beliebige Zeichenfolge mit einer Länge von bis zu 255 Byte verwenden (z.B. ... DELIMITED BY '###' ...
). Der von Ihnen angegebene Begrenzer ist eine Zeichenfolge und muss in Anführungszeichen stehen. Wenn Sie Werte angeben wollen,
die durch Tabstops getrennt werden, könnten Sie z.B. die hexadezimale Escape-Sequenz für das Tabulatorzeichen (9), ... DELIMITED BY '\x09' ...
, verwenden.
ENCODING-Klausel Verwenden Sie diese Klausel, um die Zeichenkodierung anzugeben, die für die in die Datenbank eingelesenen Daten verwendet wird. Die ENCODING-Klausel kann nicht im BCP-Format verwendet werden.
Wenn während eines Ladevorgangs ein Konvertierungsfehler auftritt, wird er entsprechend der Einstellung der on_charset_conversion_failure-Option gemeldet.
Geben Sie die BYTE ORDER-Klausel an, um eine BOM (Byte Order Mark) in den Daten zu interpretieren.
Wenn die ENCODING-Klausel angegeben ist:
Wenn die ENCODING-Klausel nicht angegeben ist:
ENCRYPTED-Klausel Verwenden Sie diese Klausel, um Verschlüsselungseinstellungen anzugeben. Wenn Sie verschlüsselte Daten laden, geben Sie ENCRYPTED KEY gefolgt vom Schlüssel an, der bei der Verschlüsselung der Daten in der Eingabedatei verwendet wurde.
Geben Sie NOT ENCRYPTED an, um anzuzeigen, dass die Daten in der Eingabedatei nicht verschlüsselt sind. Sie können auch NOT ENCRYPTED angeben, wenn die Daten verschlüsselt sind, Sie aber nicht wollen, dass der Datenbankserver sie entschlüsselt. In diesem Fall bleiben die Daten in der Datenbank verschlüsselt. Wenn hingegen eine Datei sowohl verschlüsselt als auch komprimiert ist, können Sie NOT ENCRYPTED nicht ohne NOT COMPRESSED verwenden.
ESCAPE CHARACTER-Klausel Verwenden Sie diese Klausel, um das Escapezeichen anzugeben, das in den Daten verwendet wird. Das Standard-Escapezeichen für Zeichen, die als hexadezimale Codes und Symbole gespeichert werden, ist ein Backslash (\), so ist beispielsweise \x0A die Zeilenendmarke. Mit der ESCAPE CHARACTER-Klausel kann das geändert werden. Wenn Sie beispielsweise das Ausrufezeichen als Escape-Zeichen verwenden möchten, geben Sie Folgendes ein:
ESCAPE CHARACTER '!' |
Es wird empfohlen, dass die Zeichenfolge, die Sie für das Escape-Zeichen angeben, nicht länger als ein Mehrbyte-Zeichen ist.
ESCAPES-Klausel Verwenden Sie diese Klausel, um zu steuern, ob Escapezeichen erkannt werden. Wenn ESCAPES auf ON gesetzt ist (Standardwert), werden die Zeichen nach dem Escape-Zeichen (standardmäßig \) vom Datenbankserver als Sonderzeichen erkannt und interpretiert. Zeilenumbruch-Zeichen können als Kombination \n eingefügt werden, und andere Zeichen können als hexadezimale ASCII-Codes in die Daten eingefügt werden, wie zum Beispiel als \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 werden mit "\q" ein Backslash und der Buchstabe q eingefügt. Es wird empfohlen, dass die Zeichenfolge, die Sie für das Escape-Zeichen angeben, nicht länger als ein Mehrbyte-Zeichen ist.
FORMAT TEXT Wenn Sie FORMAT TEXT (Standardwert) angeben, werden Eingabezeilen als Zeichen vorausgesetzt (wie von der ENCODING-Option festgelegt), eine Zeile pro Ausgabezeile, wobei die Werte durch die Spalten-Trennzeichenfolge voneinander getrennt werden.
FORMAT BCP Geben Sie FORMAT BCP an, um mit Adaptive Server Enterprise generierte BCP-Ausgabedateien zu laden.
FORMAT SHAPEFILE Geben Sie FORMAT SHAPEFILE an, um ESRI-Formdateien zu laden. Die Formdatei muss sich auf dem Datenbankserversystem befinden und mit FROM filename-expression oder USING FILE filename-expression geladen werden, wobei sich filename-expression auf eine ESRI-Formdatei mit der Erweiterung .shp bezieht. Die zugeordneten .shx- und .dbf-Dateien müssen sich in demselben Verzeichnis befinden wie die .shp-Datei und denselben Basisdateinamen aufweisen.
Für FORMAT SHAPEFILE wird standardmäßig die Kodierung ISO-8859-1 verwendet, wenn die ENCODING-Klausel nicht angegeben ist.
Wenn Sie FORMAT SHAPEFILE angeben, sind die folgenden Ladeoptionen zulässig:
Die LOAD TABLE-Anweisung ruft die SRID aus dem zweiten Spaltentyp ab, in den Sie laden. Wenn Sie z.B. die zweite Spalte mit dem ST_Geometry-Typ erstellen und für SRID 4326 angegeben ist, werden die Geometrien mit SRID 4326 geladen. Wenn die zweite Spalte den ST_ Geometry-Typ ohne explizite SRID aufweist, werden die Geometrien mit SRID 0 geladen.
FORMAT XML Wenn Sie FORMAT XML angeben, sind nur die folgenden Ladeoptionen zulässig:
Wenn Sie FORMAT XML verwenden, wird die Eingabedatei auf dieselbe Weise syntaktisch analysiert wie eine Abfrage mit der openxml-Systemprozedur. Die Argumente der SQL-Anweisung entsprechen den Parametern der Systemprozedur, wie im Folgenden dargestellt:
Klausel der LOAD TABLE-Anweisung | Argument der openxml-Systemprozedur | Details |
---|---|---|
row-xpath | xpath | |
— | flags | Es gibt keine Möglichkeit, einen Wert mit FORMAT XML anzugeben, der dem flags-Argument von openxml entspricht. |
NAMESPACES | namespaces |
Die FORMAT XML-Klausel verwendet die folgenden Parameter:
row-xpath Eine Zeichenfolge oder Variable, die eine XPath-Abfrage enthält. Mit XPath können Sie Muster angeben, die die Struktur des abzufragenden XML-Dokumentes beschreiben. Das in diesem Argument enthaltene XPath-Muster wählt die Knoten aus dem XML-Dokument. Jeder Knoten, der mit der XPath-Abfrage im row-xpath-Argument übereinstimmt, erzeugt eine Zeile in der Tabelle.
Meta-Eigenschaften können nur in row-xpath-Argumenten der FORMAT XML-Klausel angegeben werden. Auf eine Meta-Eigenschaft wird innerhalb einer XPath-Abfrage so zugegriffen, als handele es sich um ein Attribut. Wenn namespaces nicht angegeben wird, bindet das System standardmäßig das Präfix "mp" an den Uniform Resource Identifier (URI) urn:ianywhere-com:sa-xpath-metaprop. Wenn namespaces angegeben wird, muss dieser URI an "mp" oder an ein anderes Präfix gebunden werden, damit auf die Meta-Eigenschaften der Abfrage zugegriffen werden kann. Meta-Eigenschaften berücksichtigen die Groß- und Kleinschreibung. Folgende Meta-Eigenschaften werden unterstützt:
@mp:id Gibt eine ID für einen Knoten zurück, der innerhalb des XML-Dokumentes eindeutig ist. Die ID für einen bestimmten Knoten in einem bestimmten Dokument kann sich ändern, falls der Datenbankserver neu gestartet wird. Der Wert dieser Meta-Eigenschaft steigt mit der Dokumentordnung.
@mp:localname Gibt den lokalen Teil des Knotennamens zurück oder NULL, falls der Knoten keinen Namen trägt.
@mp:prefix Gibt den Präfixteil des Knotennamens zurück oder NULL, falls der Knoten keinen Namen trägt oder falls der Name kein Präfix hat.
@mp:namespaceuri Gibt den URI des Namespaces zurück, dem der Knoten angehört, bzw. NULL, falls der Knoten sich in keinem Namespace befindet.
@mp:xmltext Gibt eine Unterstruktur des XML-Dokuments in XML-Form zurück. Wenn Sie z.B. einen internen Knoten suchen, können Sie diese Meta-Eigenschaft dafür benutzen, eine XML-Zeichenfolge zurückzugegeben, und nicht verkettete Werte der untergeordneten Textknoten.
column-xpath Eine Zeichenfolge oder Variable, die das Schema der Ergebnismenge angibt und festlegt, wie der Wert für die einzelnen Spalten in der Ergebnismenge gefunden wird. Wenn ein FORMAT XML-Klauselausdruck mehr als einen Knoten findet, wird nur der erste Knoten in der Dokumentordnung verwendet. Falls es sich bei dem Knoten nicht um einen Textknoten handelt, wird das Ergebnis gefunden, indem alle untergeordneten Elemente des Textknotens angehängt werden. Wenn ein FORMAT XML-Klauselausdruck mit keinem der Knoten übereinstimmt, ist die Spalte für die betreffende Zeile NULL.
namespace Eine Zeichenfolge oder Variable, die ein XML-Dokument enthält. Die bekannten Namespaces ("in-scope namespaces") für die Abfrage werden aus dem Wurzelelement des Dokumentes entnommen.
HEXADECIMAL-Klausel Verwenden Sie diese Klausel, um anzugeben, ob Binärwerte als hexadezimale Werte gelesen werden. Standardmäßig ist HEXADECIMAL auf ON gesetzt. Wenn HEXADECIMAL ON ist, werden binäre Spaltenwerte als 0xnnnnnn... gelesen, wobei 0x eine Null, gefolgt vom Buchstaben x ist, und jedes n ein hexadezimales Zeichen ist. Es ist wichtig, HEXADECIMAL ON zu verwenden, wenn Sie mit Mehrbyte-Zeichensätzen arbeiten.
Die HEXADECIMAL-Klausel kann nur mit der FORMAT TEXT-Klausel verwendet werden.
ORDER-Klausel Verwenden Sie diese Klausel, um anzugeben, ob die Daten beim Laden sortiert werden. Die Standardeinstellung für ORDER ist ON. Wenn ORDER auf ON gesetzt ist und ein Clustered-Index deklariert wurde, sortiert LOAD TABLE die Eingabedaten nach dem Clustered-Index und fügt Spalten in derselben Reihenfolge ein. Wenn die zu ladenden Daten bereits sortiert sind, müssen Sie ORDER auf OFF setzen.
PCTFREE-Klausel Verwenden Sie diese Klausel, um den Prozentsatz des freien Speicherplatzes anzugeben, den Sie für jede Tabellenseite reservieren möchten. Diese Einstellung überschreibt jede permanente Einstellung für die Tabelle, jedoch nur für die Dauer des Ladevorgangs und nur bei den Daten, die geladen werden. Der Wert für percent-free-space ist ein Ganzzahlwert zwischen 0 und 100. Der Wert 0 gibt an, dass kein freier Speicherplatz auf den einzelnen Seiten zur Verfügung stehen darf. Jede Seite muss komplett vollgeschrieben werden. Ein hoher Wert führt dazu, dass jede Zeile auf eine eigene Seite geschrieben wird.
QUOTE-Klausel Die QUOTE-Klausel ist nur für TEXT-Daten bestimmt. Die string wird vor und nach den Zeichenfolgenwerten gesetzt. Der Standardwert ist ein Apostroph.
QUOTES-Klausel Verwenden Sie diese Klausel, um anzugeben, ob Zeichenfolgen in Anführungszeichen gesetzt werden. Wenn QUOTES aktiviert ist (der Standardwert), wird von LOAD TABLE erwartet, dass alle Zeichenfolgen von Anführungszeichen oder Apostrophen umschlossen sind. Wenn die QUOTES-Klausel nicht angegeben ist, ist das Hervorhebungszeichen entweder ein Apostroph oder ein Anführungszeichen, und das erste Zeichen dieser Art, das in einer Zeichenfolge gefunden wird, wird als Hervorhebungszeichen für die Zeichenfolge verwendet Die Zeichenfolgen müssen durch ein jeweils passendes Anführungszeichen abgeschlossen werden.
Wenn QUOTES ON ist, können Spaltenbegrenzungszeichenfolgen in Spaltenwerte einbezogen werden. Es wird auch vorausgesetzt, dass Apostrophe oder Anführungszeichen nicht Teil des Wertes sind. Daher wird die folgende Zeile wie zwei Werte behandelt und nicht wie drei, obwohl es ein Komma in der Adresse gibt. Außerdem werden die Anführungszeichen um die Adresse nicht in die Datenbank eingefügt.
'123 High Street, Anytown',(715)398-2354 |
Wenn Sie bei QUOTES ON ein Apostroph oder ein Anführungszeichen in einen Wert einbeziehen möchten, müssen Sie zwei Apostrophe oder Anführungszeichen verwenden. Die folgende Zeile enthält in der dritten Spalte einen Wert, der ein Apostrophzeichen ist:
'123 High Street, Anytown','(715)398-2354','''' |
ROW DELIMITED BY-Klausel
Verwenden Sie diese Klausel, um die Zeichenfolge anzugeben, die das Ende eines Eingabedatensatzes anzeigt. Die Standardtrennzeichenfolge
ist eine Zeilenendmarke (\n). Sie können jedoch auch eine beliebige Zeichenfolge mit einer Länge von bis zu 255 Byte verwenden
(z.B. ROW DELIMITED BY '###'
). Wenn Sie Werte angeben wollen, die durch Tabulatoren getrennt werden, könnten Sie z.B. die hexadezimale Escape-Sequenz
für das Tabulatorzeichen (9) verwenden, ROW DELIMITED BY '\x09'
. Wenn Ihre Trennzeichenfolge ein \n enthält, entspricht es entweder \r\n oder \n.
SKIP-Klausel Mit dieser Klausel geben Sie an, ob Zeilen am Anfang einer Datei ignoriert werden sollen. Das Argument integer gibt die Anzahl der zu überspringenden Zeilen an. Sie können diese Klausel verwenden, um beispielsweise Zeilen mit Spaltenüberschriften zu überspringen. Wenn als Zeilentrennzeichen nicht der Standardwert (Zeilenendmarke) eingestellt ist, kann es sein, dass ein Überspringen nicht korrekt funktioniert, wenn innerhalb der in Anführungszeichen stehenden Daten solche Zeilentrennzeichen enthalten sind.
STRIP-Klausel Verwenden Sie diese Klausel, um anzugeben, ob bei Werten ohne Anführungszeichen führende oder nachgestellte Leerzeichen entfernt werden sollen, bevor sie eingefügt werden. Die Option STRIP kann mit den folgenden Optionen verwendet werden:
STRIP OFF Voran- bzw. nachgestellte Leerzeichen werden nicht entfernt.
STRIP LTRIM Führende Leerzeichen werden entfernt.
STRIP RTRIM Nachgestellte Leerzeichen werden entfernt.
STRIP BOTH Sowohl führende als auch nachgestellte Leerzeichen werden entfernt.
STRIP ON Nicht mehr empfohlen. Äquivalent mit STRIP RTRIM
Das Verhalten von STRIP ist mit der QUOTES-Klausel verknüpft. Wenn Sie QUOTES OFF angeben, funktionieren STRIP OFF, STRIP LTRIM, STRIP RTRIM und STRIP BOTH genauso, wie es der jeweilige Wortlaut andeutet. Wenn Sie keine QUOTES-Klausel oder QUOTES ON angeben, werden Zeichenfolgen ohne Apostrophe oder Anführungszeichen stets links und rechts abgeschnitten. Sie können allerdings STRIP OFF oder STRIP LTRIM angeben, wenn Sie nicht wollen, dass die Zeichenfolgen auch rechts abgeschnitten werden.
WITH CHECKPOINT-Klausel Mit dieser Klausel geben Sie an, ob ein Checkpoint gesetzt werden soll. Die Standardeinstellung ist OFF. Wenn diese Klausel auf ON gesetzt ist, wird ein Checkpoint gesetzt, nachdem die Anweisung erfolgreich abgeschlossen und im Log verzeichnet ist. Wenn diese Klausel auf ON eingestellt ist und die Datenbank eine automatische Wiederherstellung erfordert, bevor ein Checkpoint gesetzt wurde, muss die für das Laden der Tabelle verwendete Datendatei vorhanden sein, damit die Wiederherstellung abgeschlossen werden kann, wenn Sie FILE NAME LOGGING verwenden. Wenn WITH CHECKPOINT ON angegeben ist und eine anschließende Wiederherstellung erforderlich ist, wird sie nach dem Checkpoint gestartet, und die Datendatei wird nicht benötigt.
Die Datendateien sind unabhängig von den Angaben für diese Klausel erforderlich, falls die Datenbank beschädigt wird und Sie eine Sicherung und die aktuelle Protokolldatei verwenden müssen, wenn Sie FILE NAME LOGGING verwenden.
WITH { FILE NAME | ROW | CONTENT } LOGGING Verwenden Sie diese Klausel, um zu steuern, wie detailliert während eines Ladevorgangs im Transaktionslog protokolliert wird. Folgende Protokollierungsebenen sind möglich:
WITH FILE NAME LOGGING-Klausel Die WITH FILE NAME LOGGING-Klausel bewirkt, dass nur die LOAD TABLE-Anweisung ins Transaktionslog geschrieben wird. Um konsistente Ergebnisse zu garantieren, wenn das Transaktionslog während der Wiederherstellung verwendet wird, muss die Datei, die für den ursprünglichen Ladevorgang verwendet wurde, an ihrem ursprünglichen Speicherort vorhanden sein und die ursprünglichen Daten enthalten. Diese Stufe der Protokollierung hat die beste Performance. Allerdings sollten Sie sie nicht verwenden, wenn Ihre Datenbank in eine Spiegel- oder Synchronisationsumgebung integriert ist. Diese Stufe kann auch nicht verwendet werden, wenn aus einem Ausdruck oder einer Clientdatei geladen wird.
Wenn Sie in der LOAD TABLE-Anweisung keine Protokollierungsstufe angeben, ist WITH ROW LOGGING die Standardstufe bei folgender Eingabe:
WITH ROW LOGGING-Klausel Die WITH ROW LOGGING-Klausel bewirkt, dass jede geladene Zeile im Transaktionslog als INSERT-Anweisung protokolliert wird. Diese Protokollierungsstufe wird für Datenbanken in einer Synchronisationsumgebung empfohlen und ist die Standardeinstellung für Datenbankspiegelung bei der Verwendung von FROM filename-expression oder USING FILE filename-expression. Wenn Sie allerdings große Datenmengen laden, kann diese Protokollierungsart die Performance beeinträchtigen und ein umfangreiches Transaktionslog bewirken.
Wenn es keine nicht-deterministischen Werte gibt, führt WITH CONTENT LOGGING wahrscheinlich zu einer verbesserten Performance.
Diese Stufe ist auch für Datenbanken ideal, in denen die Tabelle, in die geladen wird, nicht-deterministische Werte enthält, wie etwa berechnete Spalten oder CURRENT TIMESTAMP-Standardwerte.
WITH CONTENT LOGGING-Klausel Die WITH CONTENT LOGGING-Klausel bewirkt, dass der Datenbankserver die Eingabedatei in Abschnitten in das Transaktionslog kopiert. Diese Abschnitte können später in einer Kopie der Eingabedatei wiederhergestellt werden, zum Beispiel während der Wiederherstellung aus dem Transaktionslog. Beim Laden großer Datenmengen hat diese Protokollierungsart wenig Auswirkungen auf die Performance und bietet mehr Datenschutz. Allerdings entsteht dabei ein sehr großes Transaktionslog. Diese Protokollierungsstufe wird für Datenbanken in einer Spiegelumgebung empfohlen, oder wenn die Originaldateien nicht für eine spätere Wiederherstellung aufbewahrt werden, sofern es keine nicht-deterministischen Werte gibt.
Die Klausel WITH CONTENT LOGGING kann nicht verwendet werden, wenn die Datenbank in einer Synchronisationsumgebung integriert ist. Die WITH CONTENT LOGGING-Klausel ist erforderlich, wenn die Tabelle aus einer Clientdatei geladen wird.
Wenn Sie in der LOAD TABLE-Anweisung keine Protokollierungsstufe angeben, ist WITH CONTENT LOGGING die Standardstufe bei folgender Eingabe:
USING CLIENT FILE client-filename-expression
USING VALUE value-expression
USING COLUMN column-expression
statistics-limitation-option Mit diesen Optionen können Sie die Anzahl der Spalten begrenzen, für die Statistiken während der Ausführung von LOAD TABLE generiert werden. Andernfalls werden für alle Spalten Statistiken generiert. Sie sollten diese Klausel nur verwenden, wenn Sie sicher sind, dass Statistiken für manche Spalten nicht verwendet werden. Sie können ON ALL COLUMNS (Standardeinstellung), OFF, ON KEY COLUMNS oder eine Liste von Spalten, für die Statistiken generiert werden sollen, angeben.
LOAD TABLE ermöglicht das effiziente Einfügen großer Datenmengen aus einer Datei in die Datenbanktabelle. LOAD TABLE ist effektiver als die Interactive SQL-Anweisung INPUT.
LOAD TABLE legt eine Schreibsperre für die gesamte Tabelle fest. Für Basistabellen sowie globale und lokale temporäre Tabellen wird ein Festschreiben durchgeführt.
Wenn Sie versuchen, LOAD TABLE mit einer Tabelle zu verwenden, für die ein Soforttextindex aufgebaut wird oder die von einer Sofortansicht referenziert wird, schlägt das Laden fehl. Dies kommt bei Nicht-Soforttextindizes oder materialisierten Ansichten nicht vor. Es wird aber empfohlen, die Daten in abhängigen Indizes und materialisierten Ansichten zu kürzen, bevor die LOADTABLE-Anweisung für eine Tabelle ausgeführt wird, und dann die Indizes und materialisierten Ansichten zu aktualisieren.
Verwenden Sie die LOAD TABLE-Anweisung nicht bei einer temporären Tabelle, für die ON COMMIT DELETE ROWS während der Erstellung entweder explizit oder standardmäßig angegeben wurde. Allerdings können Sie LOAD TABLE verwenden, wenn ON COMMIT PRESERVE ROWS oder NOT TRANSACTIONAL angegeben wurde.
Bei FORMAT TEXT wird ein NULL-Wert angezeigt, indem gar kein Wert angegeben wird. Beispiel: Wenn drei Werte erwartet werden
und die Datei 1,,'Fred',
enthält, dann sind die eingefügten Werte 1, NULL und Fred. Wenn die Datei 1,2,
enthält, werden die Werte 1, 2 und NULL eingefügt. Werte, die nur aus Leerstellen bestehen, werden ebenfalls als NULL angesehen.
Beispiel: Wenn die Datei 1, ,'Fred',
enthält, dann werden die Werte 1, NULL und Fred eingefügt. Alle anderen Werte werden als Nicht-NULL angesehen. Beispiel:
" (Apostroph gefolgt von Apostroph) ist eine leere Zeichenfolge. "NULL" ist eine Zeichenfolge, die vier Buchstaben enthält.
Wenn eine Spalte, die mit LOAD TABLE geladen wird, NULL nicht zulässt und der Dateiwert NULL ist, erhalten nummerische Werte den Wert "0" (Null) und Zeichenspalten eine leere Zeichenfolge ('') zugeordnet. Wenn eine Spalte, die mit LOAD TABLE geladen wird, NULL zulässt und der Dateiwert NULL ist, dann ist der Spaltenwert NULL (bei allen Typen).
Wenn die Tabelle die Spalten a, b und c enthält und die Eingabedaten a, b und c enthalten, aber die LOAD-Anweisung a und b als Spalten angibt, in die Daten geladen werden sollen, werden die folgenden Werte in die Spalte c eingefügt:
Wenn DEFAULT ON angegeben ist und Spalte c einen Standardwert hat, wird der Standardwert verwendet.
Wenn die Spalte c keinen Standardwert definiert hat und NULL-Werte zulässt, wird NULL benutzt.
Wenn Spalte c keinen Standardwert hat und keine NULL-Werte zulässt, wird entweder eine Null (0) oder eine leere Zeichenfolge ('') verwendet bzw. ein Fehler zurückgegeben, abhängig vom Datentyp der Spalte.
LOAD TABLE und Datenbankspiegelung Wenn Sie bei einer Datenbankspiegelung eine LOAD TABLE-Anweisung mit einer Basistabelle ausführen, müssen Sie entweder WITH ROW LOGGING oder WITH CONTENT LOGGING als Protokollierungsstufe für die Anweisung angeben. Diese Klauseln ermöglichen es, dass die geladenen Daten im Transaktionslog aufgezeichnet werden, damit sie auch in die Spiegeldatenbank geladen werden können. Wenn diese Klauseln nicht angegeben werden, wird ein Fehler gemeldet.
LOAD TABLE und Spaltenstatistiken Um Histogramme zu Tabellenspalten zu erstellen, erfasst LOAD TABLE statistische Daten über Spalten, wenn Daten geladen werden. Die Histogramme werden vom Optimierer verwendet.
Es folgen zusätzliche Tipps zum Ladevorgang und zu Spaltenstatistiken:
LOAD TABLE speichert Statistiken für Basistabellen für die zukünftige Verwendung. Die Anweisung speichert keine Statistiken für globale temporäre Tabellen.
Wenn Sie in eine leere Tabelle laden, die früher Daten enthalten haben könnte, lohnt es sich möglicherweise, zunächst die statistischen Daten für die Spalte zu löschen, bevor Sie die LOAD TABLE-Anweisung ausführen.
Wenn beim Durchführen einer LOAD TABLE-Anweisung für eine Spalte Spaltenstatistiken existieren, werden die Statistiken für die Spalte nicht neu berechnet. Stattdessen werden die Statistiken für die neuen Daten in die vorhandenen Statistiken eingefügt. Wenn also die vorhandenen Spaltenstatistiken veraltet sind, werden sie nach dem Laden von neuen Daten in die Spalte weiterhin veraltet sein. Wenn Sie vermuten, dass die Spaltenstatistiken veraltet sind, sollten Sie sie vor oder nach dem Ausführen der LOAD TABLE-Anweisung aktualisieren.
LOAD TABLE fügt Statistiken nur hinzu, wenn die Tabelle fünf oder mehr Zeilen umfasst. Wenn die Tabelle mindestens fünf Zeilen enthält, werden Histogramme folgendermaßen geändert:
Daten bereits in der Tabelle? | Histogramm vorhanden? | Maßnahme |
---|---|---|
Ja | Ja | Änderungen in die bestehenden Histogramme integrieren |
Ja | Nein | Keine Histogramme erstellen |
Nein | Ja | Änderungen in die bestehenden Histogramme integrieren |
Nein | Nein | Neue Histogramme aufbauen |
LOAD TABLE generiert keine Statistiken für Spalten, die NULL für mehr als 90% der zu ladenden Zeilen enthalten.
Dynamisch aufgebaute Dateinamen verwenden Sie können eine LOAD TABLE-Anweisung mit einem dynamisch aufgebauten Dateinamen ausführen, indem Sie den Dateinamen einer Variablen zuordnen und den Variablennamen in der LOAD TABLE-Anweisung verwenden.
Die Berechtigungen für das Ausführen einer LOAD TABLE-Anweisung hängen wie folgt von der Datenbankserver-Option –gl ab:
Wenn die Option -gl ALL lautet, müssen Sie der Eigentümer der Tabelle sein, oder über DBA-Berechtigungen bzw. ALTER-Berechtigungen verfügen.
Wenn -gl auf DBA gesetzt ist, benötigen Sie DBA-Berechtigungen.
Wenn -gl auf NONE gesetzt ist, wird LOAD TABLE nicht zugelassen.
Erfordert eine Exklusivsperre der Tabelle
Folgendes gilt beim Lesen einer Datei von einem Clientcomputer:
READCLIENTFILE-Datenbankberechtigung ist erforderlich.
Leseberechtigungen sind in dem Verzeichnis erforderlich, aus dem gelesen werden soll.
Die Datenbankoption allow_read_client_file muss aktiviert sein.
Die Sicherheitsfunktion read_client_file muss aktiviert sein.
Automatisches Festschreiben (Autocommit).
Einfügungen werden nicht in der Transaktionslogdatei aufgezeichnet, wenn die WITH ROW LOGGING-Klausel nicht angegeben ist, sodass die eingefügten Zeilen je nach Protokollierungstyp möglicherweise nicht wiederhergestellt werden, wenn ein Fehler auftritt. Die ursprüngliche Datei ist erforderlich, wenn Sie die Zeilen wiederherstellen müssen und WITH FILE NAME LOGGING verwendet wird. Außerdem sollte die LOAD TABLE-Anweisung ohne WITH ROW LOGGING-Klausel nicht in Datenbanken verwendet werden, die als MobiLink-Clients fungieren, oder in einer Datenbank, die in ein SQL Remote-Replikationssystem eingebunden ist, weil diese Technologien Änderungen über die Analyse der Protokolldatei replizieren.
Die LOAD TABLE-Anweisung löst keine Trigger aus, die der Tabelle zugeordnet sind.
Ein Checkpoint wird zu Beginn des Vorgangs ausgeführt. Ein zweiter Checkpoint wird am Ende durchgeführt, wenn WITH CHECKPOINT ON angegeben ist.
Spaltenstatistiken werden aktualisiert, wenn eine signifikante Menge von Daten geladen wird.
SQL/2008 Erweiterung des Herstellers.
Hier folgt ein Beispiel für LOAD TABLE. Zuerst wird eine Tabelle erstellt, in die dann Daten geladen werden, wobei eine Datei mit dem Namen input.txt verwendet wird.
CREATE TABLE t( a CHAR(100), let_me_default INT DEFAULT 1, c CHAR(100) ); |
Nachfolgend wird der Inhalt der Datei input.txt gezeigt:
ignore_me, this_is_for_column_c, this_is_for_column_a |
Die folgende LOAD-Anweisung lädt die Datei input.txt:
LOAD TABLE T ( filler(), c, a ) FROM 'input.txt' FORMAT TEXT DEFAULTS ON; |
Der Befehl SELECT * FROM t
ergibt folgende Ergebnismenge:
a | let_me_default | c |
---|---|---|
this_is_for_column_a | 1 | this_is_for_column_c |
Im folgenden Beispiel wird die LOAD TABLE-Anweisung über die Anweisung IMMEDIATE mit einem dynamisch aufgebauten Dateinamen ausgeführt:
CREATE PROCEDURE LoadData( IN from_file LONG VARCHAR ) BEGIN DECLARE path LONG VARCHAR; SET path = 'd:\\data\\' || from_file; LOAD TABLE MyTable FROM path; END; |
Das folgende Beispiel lädt UTF-8-kodierte Tabellendaten in 'mytable':
LOAD TABLE mytable FROM 'mytable_data_in_utf8.dat' ENCODING 'UTF-8'; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |