Zum Inhalt springen

spool befehl


julien88

Empfohlene Beiträge

Ich suche eine Funktion die mir die Daten aus einer Abfrage in einem File speichert.

Bsp.

select *

from Tabelle1

where id = 1

Die gefundenen Daten sollen automatisch in ein File geschrieben werden.

Hierzu habe ich den Spool befehl gefunden, allerdings sagte mir man direkt das dieser ziemlich veraltet sei.

Nach einigen Recherchen habe ich auch noch den Befehl utl_file gefunden, weiß allerdings nicht wie der anzuwenden ist.

Kann mir da wer helfen ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor der abfrage in das sql script für SQLPLUS ( spool ist ein sqlplus befehl, kein standard SQL)

ein


spool pfad_auf_dem_client/dateiname;

select * from table;

end spool;

Was die vor und nachteile angeht, um welche Datenmengen geht es denn ? Bei großen Datenmengen muss Spool alles über das Netzwerk zum client übertragen, während UTL_File auf dem Server schreibt. btw. Welche Oracle Version? PL/SQl Lösung mit UTL_File:

create or replace function  dump_csv( p_query     in varchar2,

                                      p_separator in varchar2 

                                                    default ',',

                                      p_dir       in varchar2 ,

                                      p_filename  in varchar2 )

return number

AUTHID CURRENT_USER

is

    l_output        utl_file.file_type;

    l_theCursor     integer default dbms_sql.open_cursor;

    l_columnValue   varchar2(2000);

    l_status        integer;

    l_colCnt        number default 0;

    l_separator     varchar2(10) default '';

    l_cnt           number default 0;

begin

    l_output := utl_file.fopen( p_dir, p_filename, 'w' );


    dbms_sql.parse(  l_theCursor,  p_query, dbms_sql.native );


    for i in 1 .. 255 loop

        begin

            dbms_sql.define_column( l_theCursor, i, 

                                    l_columnValue, 2000 );

            l_colCnt := i;

        exception

            when others then

                if ( sqlcode = -1007 ) then exit;

                else

                    raise;

                end if;

        end;

    end loop;


    dbms_sql.define_column( l_theCursor, 1, l_columnValue, 

                            2000 );


    l_status := dbms_sql.execute(l_theCursor);


    loop

        exit when ( dbms_sql.fetch_rows(l_theCursor) <= 0 );

        l_separator := '';

        for i in 1 .. l_colCnt loop

            dbms_sql.column_value( l_theCursor, i, 

                                   l_columnValue );

            utl_file.put( l_output, l_separator ||  

                                    l_columnValue );

            l_separator := p_separator;

        end loop;

        utl_file.new_line( l_output );

        l_cnt := l_cnt+1;

    end loop;

    dbms_sql.close_cursor(l_theCursor);


    utl_file.fclose( l_output );

    return l_cnt;

end dump_csv;

/



You would use that for example like this:


create or replace procedure test_dump_csv

as

    l_rows  number;

begin

    l_rows := dump_csv( 'select * 

                           from all_users 

                           where rownum < 25', 

                        ',', '/tmp', 'test.dat' );

end;

/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erst einmal danke für deine Hilfe john.

Ich arbeite mit einen Oracle Client 10g

Deine Function sieht ja fein aus, allerdings verstehe ich da gar nichts von :confused:

Ich möchte gerne erreichen das eine Function mir die Ergebnisse die mir ein SQL Befehl liefert, in eine Datei schreibt.

Bsp.

select spalte1

from tabelle

where id > 5

Diese Ergebnisse möchte ich gerne in ein File geschrieben bekommen

Link zu diesem Kommentar
Auf anderen Seiten teilen

einfach mal bei google. nach utl_file suchen, die ersten beiden treffer sind definitiv schon mal sehr brauchbar:

http://www.google.de/search?hl=de&q=utl_file&btnG=Suche&meta=lr%3Dlang_de

das beispiel von john geht natürlich schon ein wenig mehr in die tiefe, allerdings kann man auch zunächst einmal 'klein' anfangen. also eine datei erzeugen, ein paar fixe wörter dort hinein schreiben und die datei schließen.

v_file := UTL_FILE.FOPEN('C:\temp','test.txt', 'w');

UTL_FILE.PUT_LINE(v_file,' Überschrift');

UTL_FILE.NEW_LINE (v_file);

UTL_FILE.PUT_LINE(v_file,'Erste Zeile');

....

UTL_FILE.FCLOSE(v_file);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...