SQL-Loqder / Daten Import Oracle 10...TOAD 8.6

Hey!

ICh habe eine Excel Datei und soll diese irgendwie in Toad einfügen.
Es gibt leider keinen einfachen Button Import :smile:
Ich habe mir den SQl Loader angeguckt und folgende Datei erstellt:

Controldat.ctl

LOAD DATA
INFILE ‚D:\Ankes_Dateien\import1.xls‘
INTO TABLE Tabellenname

Die Daten stehen in Datenbank.import1.xls

Über Start > Ausführen führe ich diese Befehl aus:
sqlldr user/passwort control=D:\Dateien\controldat.ctl

Leider wird die Tabelle aber nicht gefüllt.
Wo liegt der Fehler habe ich etwas vergessen oder gibt es noch eine einfacherer Möglichkeit die Daten zu importieren?

Hey!

ICh habe eine Excel Datei und soll diese irgendwie in Toad
einfügen.

  • Versuche es mal als External Table. Ich mache dass oft so, vorgängig muss die Excel Tabelle allerdings als CSV gespeichert werden. Anschliessend kannst du in Oracle eine External Table ertsellen und dann einfach normal ein Select darauf machen. Ich habe dir eni Beispiel, welches du auf deine Bedürfnisse anpasen musst. Beachte, dass du noch eine DIRECTORY Object in der DB brauchst, welches den (Server) Pfad zur CSV Datei beinhaltet.

CREATE TABLE m_dataload.ext_user
(username VARCHAR2(50),
nachname VARCHAR2(50),
vorname VARCHAR2(50),
sprache VARCHAR2(10),
user_id VARCHAR2(100),
anrede VARCHAR2(50),
gebdatum VARCHAR2(100),
adresse VARCHAR2(100),
postleitzahl VARCHAR2(50),
ort VARCHAR2(100))
ORGANIZATION EXTERNAL (
DEFAULT DIRECTORY MYDIR
ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE
BADFILE ‚user_import.bad‘
LOGFILE ‚t.log_xt‘
READSIZE 1048576
FIELDS TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚?‘ LDRTRIM
REJECT ROWS WITH ALL NULL FIELDS
(Username CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
Nachname CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
Vorname CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
Sprache CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
USER_ID CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
Anrede CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
GebDatum CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
Adresse CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
Postleitzahl CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
Ort CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘)
LOCATION (
MYDIR:‚userliste.csv‘
)
)
REJECT LIMIT UNLIMITED
/

Gruss

Danke erstmal!

Also ein .csv habe ich daraus gemacht.
Jetzt muss ich das Skript von dir ausfürhen (mit den Spalten die ich brauche)
und dann?

Danke erstmal!

Also ein .csv habe ich daraus gemacht.
Jetzt muss ich das Skript von dir ausfüren (mit den Spalten
die ich brauche)
und dann?

  • Kopiere das CSV auf deinen DB-Server

  • Erstelle in der DB mit CREATE DIRECTORY MYDIR as ‚/my_path/my_csv.csv‘ ein Directory Objekt

  • Führe das Create Table - Statemment aus. (Bedingung, ist, das im CSV die Feldtitel enthalten sind, ansonsten musst du in der ersten Zeile des CSV’s Titel einfügen. Diese Titel sollten keine Blanks, Sonderzeichen etc enthalten)

  • Du solltest jetzt in deinem Schema eine neue Tabelle haben, welche du ganz normal mit select * from my_table abfragen kannst. Erscheinen keine oder zu wenige Datesätze, schaue im LOG resp. in der Datei badxxx.txt nach, wo der Fehler liegt. Denn Namen der Log-Datei und des Badfiles findest du auch im Script.

  • hast du nun eine neue Version deines CSV mit neuen Daten, kannst du das File File einfach überschreiben und neu abfragen.

Gruss

Ok das habe ich nun gemacht. Wenn ich das Skript ausführen will, kommt aber ein Fehler in der 2.ZEile.

ORA-00922: Fehlende oder ungültige Option

Das Skript nochmal:

CREATE TABLE m_dataload.REWE_MCA
(USER_MSV VARCHAR2(255),
USER_RCF VARCHAR2(255),
KOSTENSTELLE VARCHAR2(255),
NNAME_TOK VARCHAR2(255),
VNAME_TOK VARCHAR2(255),
TOKEN_TSI VARCHAR2(255),
TOKEN_RSA VARCHAR2(255),
FIRMA VARCHAR2(255),
GRUPPE VARCHAR2(255),
PIN_TSI VARCHAR2(255),
PASSWORT VARCHAR2(255),
VPNNCP VARCHAR2(255),
VPNBENUTZER VARCHAR2(255),
BESTELLDATUM DATE
IPADRESSE VARCHAR2(255))
ORGANIZATION EXTERNAL (
DEFAULT DIRECTORY MYDIR
ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE
BADFILE ‚user_import.bad‘
LOGFILE ‚t.log_xt‘
READSIZE 1048576
FIELDS TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚?‘ LDRTRIM
REJECT ROWS WITH ALL NULL FIELDS
(USER_MSV CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
USER_RCF CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
KOSTENSTELLE CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
NNAME_TOK CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
VNAME_TOK CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
TOKEN_TSI CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
TOKEN_RSA CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
FIRMA CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
GRUPPE CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
PIN_TSI CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
PASSWORT CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
VPNNCP CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
VPNBENUTZER CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
BESTELLDATUM CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘,
IPADRESSE CHAR(255)
TERMINATED BY „;“ OPTIONALLY ENCLOSED BY ‚"‘)
LOCATION (
MYDIR:‚import1.csv‘
)
)
REJECT LIMIT UNLIMITED
/

Ich find nich heraus woran das leigt. Weißt du das vielleicht?
Die Spaltennamen sind in der csv - Datei enhalten.

Ok das habe ich nun gemacht. Wenn ich das Skript ausführen
will, kommt aber ein Fehler in der 2.ZEile.

ORA-00922: Fehlende oder ungültige Option

Das Skript nochmal:

BESTELLDATUM DATE

–> Es fehlt ein Komma hier :

BESTELLDATUM DATE,

Gruss

Hi,
Wenn du das öfters machen willst, würde ich auch über external tables gehen.

Für eine einmalige Aktion würde ich mir in Excel insert statements basteln und die einfach als script ausführen.

Jens

Ja an die Insert Statements habe ich auch gedacht. Mein Problem ist nur wenn ich das einmal schreibe und dann „runterziehe“ ändert sich der Zellenname nicht automatisch.
Das ginge ja geschrieben so oder:

=„insert into tabell (spalte,spalt,spal) Values (A1,A2,A3)“ oder

Fast:
=verketten(„insert into tabelle (a,b,c) values (“;a1;",";a2;",";a3;");")

Ich hab das jetzt hier so runtergetippt daher sind wahrscheinlich noch jede Menge Tipfehler drin, die du behalten darfst. Aber das Prinzip wird hoffentlich klar: Du musst die festen bestandteile (Insert into …) mit den variablen Anteilen verketten. Wenn du die Funktion so eingibst, sollte Excel die Werte aus den Zellen deines Excelsheets im insert anzeigen, und beim ‚runterziehen‘ die Werte auch anpassen.

Wenn du übrigens wirklich runterziehst und nicht nach rechts, müsste es a1,b1 und c1 sein.

Jens

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Juhu!!!
Danke!

DAs es dann B1,C1,…heißen muss ist klar:smile:

Danke!

Hm naja :smile:
Ich hab leider noch ein Problem.

  1. Wenn ich so das Datum einfügen will, wird mir in der Into-Klausel in Excel nicht das Daum angezeigt sondern eine Zahl (z.B.39025) ich hab die Spalte in Datum „formatiert“ bringt aber nichts.

  2. Kann ich die Insert Klausul nur begrenzt groß machen?
    Es sind Spalten von A nis O vorhanden, die ich auch einfügen will. Schreibe ich die Into-Klausel bis N gibt es keine Probleme, schreibe ich sie bis O kommt dieser Fehler :

„Sie haben zuviele Argumente zu diese Funktion eingegeben.“

Woran könnte das liegen?

Hm naja :smile:
Ich hab leider noch ein Problem.

  1. Wenn ich so das Datum einfügen will, wird mir in der
    Into-Klausel in Excel nicht das Daum angezeigt sondern eine
    Zahl (z.B.39025) ich hab die Spalte in Datum „formatiert“
    bringt aber nichts.

Das müsste ich jetzt auch ausprobieren, hab dafür aber keine Zeit.
Such in der Hilfe mal nach Funktionen, die ein Datum in einen Text umwandeln. Die könnten helfen.

  1. Kann ich die Insert Klausul nur begrenzt groß machen?
    Es sind Spalten von A nis O vorhanden, die ich auch einfügen
    will. Schreibe ich die Into-Klausel bis N gibt es keine
    Probleme, schreibe ich sie bis O kommt dieser Fehler :

„Sie haben zuviele Argumente zu diese Funktion eingegeben.“

Woran könnte das liegen?

Ja, Excel hat eine Begrenzte Anzahl von Parametern.
Müsste sich umgehen lassen, in dem du das ganze verschachtelst.
In etwa so:

=verketten(verketten(…);verketten(…))

Jens