Auswahl  

 

Oracle
PL/SQL
10.x:11.2:12.1:12.2:18.1:9.x:12.1, 12.2
dbms_output, dbms_pipe, htp.p
23.07.18
MP
23.07.18
MP

Body

Ich liebe das Package dbms_output, wenn es nur nicht ...

  • so einen langen Namen
  • so eine eingeschänkte Bedienung

hätte.

Aber den letzen Punkt können wir ändern. In diesem Tipp holen wir die Daten, die wir in den Puffer von dbms_output geschrieben haben und legen Sie woanders hin.

##################################################
Umleitung von dbms_output zu pipe
##################################################

CREATE OR REPLACE PROCEDURE test_ausgabe
-- Rechte: grant execute on dbms_pipe to scott;
IS
    PROCEDURE dop2pipe (pipe_name IN VARCHAR2 DEFAULT 'DBMS_OUTPUT_PIPE') IS
       lines dbms_output.chararr;
       num_lines number:=1000000;
    BEGIN
       dbms_output.get_lines(lines, num_lines);
       FOR i IN 1..num_lines LOOP
            dbms_pipe.pack_message (lines(i));
       END LOOP;
        IF (dbms_pipe.send_message (pipe_name)) <> 0 THEN
            raise_application_error(-20500,'Fehler beim Senden in Pipe '||pipe_name||' aufgetreten !');
        END IF;
    END;
BEGIN
   dbms_output.enable(null);  
   FOR i IN 1 .. 10 LOOP
     dbms_output.put_line('Zeile='||i);
   END LOOP;
dop2pipe;   -- <=######## Umwandelung von dbms_output in Pipe
END;
/
CREATE OR REPLACE PROCEDURE get_dout_from_pipe (pipe_name IN VARCHAR2 DEFAULT 'DBMS_OUTPUT_PIPE')
IS
     v_message VARCHAR2(32767);
     v_timeout NUMBER:=120;
BEGIN
     IF (DBMS_PIPE.receive_message(pipe_name,v_timeout)) <> 0 THEN
          RAISE_APPLICATION_ERROR(-20501,'Fehler beim Lesen aus Pipe '||pipe_name||' aufgetreten !');
     END IF;
     LOOP
        EXIT WHEN DBMS_PIPE.NEXT_ITEM_TYPE = 0;
         DBMS_PIPE.unpack_message(v_message);
         DBMS_OUTPUT.PUT_LINE(v_message);
     END LOOP;
END;
/

##################################################
Umleitung von dbms_output zu htp
##################################################


CREATE OR REPLACE PROCEDURE test_ausgabe
IS
    PROCEDURE dop2htp IS
       lines dbms_output.chararr;
       num_lines number:=1000000;
    BEGIN
       dbms_output.get_lines(lines, num_lines);
       FOR i IN 1..num_lines LOOP
          htp.p(lines(i)||'<BR>');
       END LOOP;
    END;
BEGIN
   dbms_output.enable(null);  
   FOR i IN 1 .. 10 LOOP
     dbms_output.put_line('Zeile='||i);
   END LOOP;
dop2htp;   -- <=######## Umwandelung von dbms_output in htp.p Ausgabe
END;
/
DBMS_OUTPUT aufgebohrt. Wir leiten die Aussgabe nach dbms_pipe oder htp.p um.