APEX - Download vorgegebenes Format

In APEX gibt es eine Reihe bereits mitgelieferter Download-Möglichkeiten:
- im Classic-Report
- im Interactiv Report

Manchmal reichen diese allerdings nicht aus. Z.B. wenn die Darstellung in APEX und der Download abweichen, oder die Download-Performance ein Problem ist.

Auf Basis der Vorlage SCOTT SPENDOLINI (URL https://spendolini.blogspot.de/2006/04/custom-export-to-csv.html) schaut meine Lösung wie folgt aus:

Auf der eigentlichen Seite einen Button (Region Button) erstellen, mit einem Redirect zu einer neuen, leeren, eigens für den Download angelegten Seite verweist.
Auf dieser Download-Seite (diese bekommen bei mir immer eine Seiten-Nummer höher als die Button-Seite) wird im BEFORE HEADER ein Process vom Typ PL/SQL angelegt.

Dieser Process übernimmt den eigentlichen Download.

Aufbau des PL-Blocks:

declare
  v_quartal number;

begin

-- Set the MIME type
owa_util.mime_header('text/csv', false, 'ISO-8859-1');

--Dateinamen flexibilisieren
SELECT quartal
  INTO v_quartal
  FROM myTBL
 WHERE zvl_run_key = :P13_ABC
   AND ROWNUM < 2;

-- Set the name of the file
htp.p('Content-Disposition: attachment; filename="MyFilename_'||v_quartal||'.csv"');

-- Close the HTTP Header
owa_util.http_header_close;

-- Kopfzeile
 htp.prn(
'QUARTAL;SP_A;SP_B;SP_C;'|| chr(13)
   );

-- Über alle Zeilen loopen
for x in (
  SELECT QUARTAL,
         SP_A,
         SP_B,
         SP_C
    FROM myTBL2
   WHERE zvl_run_key = :P13_ABC
)
loop

 -- Zeile schreiben, Semikolon-getrennt und mit CR beendet
 htp.prn(
x.QUARTAL ||';'||
x.SP_A ||';'||
x.SP_B ||';'||
x.SP_C ||chr(13)
   );
end loop;

-- Fehlercode senden, damit HTML nicht gerendert wird
htmldb_application.g_unrecoverable_error := true;

end;

Fertig!
Klappt wunderbar und ist sehr schnell (650tsd Zeilen in ca. 20sec).


Kommentare

Beliebte Posts aus diesem Blog

PGA unter Oracle 11g

trunc(sysdate) - nette Spiele mit dem Datum

Datapump - Verzeichnis erstellen