Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

spool befehl

Empfohlene Antworten

Veröffentlicht

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 ?

utl_file schreibt auf dem datenbankserver in ein Verzeichnis

Spool schreibt auf dem Client

Wo möchtest du das File ablegen ?

Und: wieso ist spool veraltet?

Um Welche Datenmengen geht es ?

es wurde mir gesagt das es nicht von vorteil wäre mit spool zu arbeiten, möchte es aber dennoch ausprobieren.

Eigentlich soll er auf dem Client speichern, hab aber auch Serverzugriff ...

Wie würde ich den Spool richtig einbinden ?

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;

/

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

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);

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.