Hallo,
ich habe eine Frage und ich hoffe ihr könnt mir dabei helfen. Ich benutzes das unten eingefügt script um eine CSV-Datei aus einem übergeben SQL zu erzeugen. Leider werden nur die Daten aus der CSV-Datei geschrieben. Habt ihr einen Tipp für mich, wie ich als Erste Zeile die Spaltennamen des Cursors ausgeben kann?
Viele Dank und allen ein schöne Wochenende!
ich habe eine Frage und ich hoffe ihr könnt mir dabei helfen. Ich benutzes das unten eingefügt script um eine CSV-Datei aus einem übergeben SQL zu erzeugen. Leider werden nur die Daten aus der CSV-Datei geschrieben. Habt ihr einen Tipp für mich, wie ich als Erste Zeile die Spaltennamen des Cursors ausgeben kann?
Viele Dank und allen ein schöne Wochenende!
Code:
CREATE OR REPLACE FUNCTION DUMP_CSV ( p_query IN varchar2, p_separator IN varchar2 DEFAULT ',', p_dir IN varchar2, p_filename IN varchar2, p_columnheadings IN varchar2 DEFAULT 'N' ) RETURN number AUTHID CURRENT_USER -- -- Lokale Variablen -- 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; l_columheadings number DEFAULT 0; begin -- -- Deklaration Ausgabedatei -- l_output := utl_file.fopen( 'MYDIR', p_filename, 'w' ); -- -- Verbindung des Cursors mit dem SQL-Statement -- dbms_sql.parse( l_theCursor, p_query, dbms_sql.native ); -- -- Definition der Spalten (max. 255 Stück) -- 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); -- -- Abarbeitung des Cursors -- loop exit when ( dbms_sql.fetch_rows(l_theCursor) <= 0 ); l_separator := ''; -- -- Abarbeitung der Spalten und Ergänzen des Separators -- 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; -- -- Schliessen des Cursors und der Datei -- dbms_sql.close_cursor(l_theCursor); utl_file.fclose( l_output ); RETURN l_cnt; end DUMP_CSV; / exit;