Oracle

Oracle

Posts 1-10 of 11
  • Benjamin Wagner
    Benjamin Wagner
    The company name is only visible to registered members.
    Inhalt einer Textdatei in Oracle als varchar2 speichern
    Hallo,

    wir haben hier folgende Anforderung, die mir Mühe macht. Wir setzen den Oracle Instant Client ein, um diverse Parameter in eine Tabelle zu schreiben. Der Aufruf sieht so aus:

    echo insert into login_admin.logins (Datum,username,rechnername,IPaddress,Logonserver,LOCAL_ENV,CUSTOM_TEXT) values ((TO_DATE('%DATUM%','DD.MM.YYYY')),'%USERNAME

    %','%COMPUTERNAME%','%IPADDRESS%','%LOC%','%LOCAL_ENV%','%CUSTOM_TEXT%'); > %TC_ROOT%\Instant_Client\logon_tool.sql
    echo commit; >> %TC_ROOT%\Instant_Client\logon_tool.sql
    echo exit >> %TC_ROOT%\Instant_Client\logon_tool.sql

    ::Insert data into SQL-database
    echo Insert into database ...
    echo ... can take some seconds
    %TC_ROOT%\Instant_Client\sqlplus.exe username/password@database @%TC_ROOT%\Instant_Client\logon_tool.sql
    echo.
    echo ... done

    Das klappt einwandfrei. Jetzt soll ich den Inhalt einer mehrzeiligen Batchdatei in das Feld Custom_Text in der Datenbank eintragen. Mein erster Gedanke war, das per Umgebungsvariablee zu definieren. Leider kann das WIndows aber nicht, sondern verwendet die letzte Zeile in der BAtchdatei als Wert für die Variable. Ich möchte aber den gesamten Inhalt haben. Das Feld CUSTOM_TEXT habe ich als VARCHAR(4000)= deklariert. Wie bekomme ich nun den Inhalt der Datei in diese Feld hinein?

    Viele Dank für Denkanstöße.
  • Thomas Beetz
    Thomas Beetz    Premium Member
    The company name is only visible to registered members.
    Re: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Hallo,

    hat dafür Oracle nicht sqlldr erfunden?

    Mit freundlichen Grüßen
    Thomas Beetz
  • Benjamin Wagner
    Benjamin Wagner
    The company name is only visible to registered members.
    Re: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Ich habe hier aber keine CSV-DAtei, die importiert werden soll, sondern eine Logdatei, deren INhalt ich in ORacle abspeichern will. Wie bekomme ich den Inhalt einer lokalen Logdatei in Oracle?
  • Jörg Sobottka
    Jörg Sobottka
    The company name is only visible to registered members.
    Re^2: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Hallo Herr Wagner,

    Benjamin Wagner schrieb:
    Ich habe hier aber keine CSV-DAtei, die importiert werden soll, sondern eine Logdatei, deren INhalt ich in ORacle abspeichern will. Wie bekomme ich den Inhalt einer lokalen Logdatei in Oracle?
    Wenn die Datei SO klein ist, dass sie noch in einem Varchar2 Platz hat, würde ich UTL_FILE vorschlagen:

    http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/u_file...

    Viele Grüsse
    Jörg Sobottka
    Delta Energy Solution AG - Oracle (Schweiz) GmbH: Industry Partner of the Year 2011
  • Peter Schneider
    Peter Schneider
    The company name is only visible to registered members.
    Re^2: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Hallo Herr Wagner,
    das kommt darauf an, was Sie genau wollen
    --> Die Datei soll in einem varchar2(4000)-Feld in einem Datensatz oder
    --> zeilenweise (eine Zeile in einem Datensatz) in besagtem varchar2(4000)-Feld abgelegt werden?

    und wie die Ausgangslage genau ist.
    --> meint lokale Logdatei lokal auf dem Client oder
    --> lokal auf dem Server (Der Client kann auch auf dem Server installiert sein)?

    Bei lokal auf dem Client und zeilenweisem Speichern der Logdatei ist der SQL-Loader durchaus eine Variante (CSV mit nur einem Feld). Auch eine Menge anderer Lösungen z.B. sed, .. sind möglich.
    Bei lokal auf dem Server sind z.B. UTL_FILE, external Table, SQL-Loader Alternativen.

    Alles gute im Neuen Jahr!
    Peter Schneider
  • Benjamin Wagner
    Benjamin Wagner
    The company name is only visible to registered members.
    Re^3: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Die Datei liegt lokal auf dem Client. wir möchten hier auswerten, was bei diversen Toolstarts in der Logdatei bereits angesammelt wurde. EInen Zeilenumbruch im Feld benötige ich nicht mal, es soll einfach der Inhalt der Logdatei in einem Feld in der DB landen.
    This post was modified on 09 Jan 2012 at 09:30 am.
  • Kai-Uwe Möller
    Kai-Uwe Möller    Premium Member
    The company name is only visible to registered members.
    Re^4: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Wenn die interesierenden Dateien auf dem Client liegen und klassische Oracle-Client-Tools wie SQL Loader ausscheiden, bleibt das Entwickeln und Verteilen einer entsprechenden Client-Anwendung, die die Logdaten liest und in die Datenbank schreibt.

    Falls auf den Clients eine JRE installiert ist, kann man das mit wenigen Zeilen Java-Code bewerkstelligen. Sicher geht es auch mit C# oder .Net, je nach vorhandenem Know-How und Client-Konfiguration. Oder man kopiert die Logs doch besser (automatisch, zeitgesteuert in Intervallen) auf einen Server und macht die Verarbeitung dort.
  • Carsten Czarski
    Carsten Czarski
    The company name is only visible to registered members.
    Re^5: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Hallo zusammen,

    wie wäre es mit einer externen Tabelle - hier ist ein Beispiel für die Error-Logdatei des Apache Webserver. Das sollte doch einfach an ein anderes Tool anpassbar sein.
    http://www.oracle.com/webfolder/technetwork/de/community/ape...

    Hinweis: Der Tipp ist zwar in der APEX Community, externe Tabellen sind von APEX aber völlig unabhängig und können auch aus der SQL-Ebene heraus genutzt werden.

    Beste Grüße

    -Carsten Czarski


    Deutschsprachige APEX-Community: Tipps, Tricks, Best Practice
    http://tinyurl.com/apexcommunity

    SQL und PL/SQL: Tipps, Tricks & Best Practice
    http://sql-plsql-de.blogspot.com

    Twitter: @cczarski @oraclebudb
  • Horst Bößhar
    Horst Bößhar    Premium Member
    The company name is only visible to registered members.
    Re^6: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Hallo Kollegen,

    wie wäre es mit Speichern in CLOB oder BLOB ?

    Das sollte gehen. Ich habe das selbst schon durchgeführt.
    Längenprobleme gibt es dort kaum.

    Grüße aus Bornheim

    Horst Bößhar
  • Sven-Uwe Weller
    Sven-Uwe Weller    Premium Member
    The company name is only visible to registered members.
    Re: Inhalt einer Textdatei in Oracle als varchar2 speichern
    Obwohl ich generell lieber eine Lösung mittels External Tables bevorzugen würde, scheint mir hier auch ein quick & dirty Ansatz hilfreich zu sein.

    Gehe ich recht in der Annahme das das Hauptproblem in fehlenden Windows Zugriff auf den Datei Inhalt liegt?

    Der FOR Befehl ist dabei in der Lage den Inhalt einer Datei zeilenweise zu verarbeiten. Sie können dann diesen Inhalt in ein SQL-File schreiben, welches Zeile für Zeile in ihrer Kommentarspalte updatet. Wichtig dabei ist die /F option, für den Zugriff auf das File selbst.

    Grobes Beispiel:

    for /F "tokens=*" %i in (test.log) do echo "update myTable set comment = comment||chr(10)||chr(13)||'%i;'"

    Dieser Befehl hängt die Zeilen aus der Datei test.log als Kommentar in alle Zeilen der Tabelle myTable. Bzw. er bereitet nur das Update Statement dafür vor. Anstelle des Updates, sind sicherlich auch andere Varianten denkbar, wie z.B. die Zeile direkt in ein File zu schreiben, welches dann von einem SQL*Plus Kommando umklammert und später ausgeführt wird.

    Es gibt auch eine ganze Menge Restriktionen. z.B. dürften bei der gezeigten Lösung in der Datei kein einzelnen oder doppelten Hochkommas verwendet werden.

    An sich ist deshalb von so einer Variante abzuraten und man sollte für eine professionelle Lösung besser auf Tools wie SQL*Loader oder External Tables zurückgreifen.

    Viele Grüße
    Sven Weller
    This post was modified on 09 Jan 2012 at 01:58 pm.