2016-03-30 9 views
1

Ich habe ein einfaches Programm in PLSQL. Grundsätzlich hat das Programm keine Fehler, druckt aber keine Ausgabe, wenn ich dbms_output.put verwende.dbms_output.put druckt keine Daten

declare 
v_name varchar(30); 
v_len number; 
v_number number; 
    begin 
    v_name := '&name'; 
    v_number := length(v_name); 
    while v_number > 0 
    loop 
     dbms_output.put(v_number||'::'||substr(v_name,v_number,1)); 
     v_number := v_number - 1; 
    end loop; 
    end; 

Das obige Programm erzeugt eine Ausgabe, wenn ich dbms_output.put_line verwenden, aber der Ausgang hat neue Zeile nach immer Charakter, und ich möchte die Ausgabe in einer einzigen horizontalen Linie haben. Bei der Verwendung von dbms_output.put gibt es keinen Fehler, aber es gibt mir nur die Nachricht: "anonymer Block abgeschlossen"

Bitte lassen Sie mich wissen, wenn ich etwas falsch mache.

Danke, Dex.

+0

Danke Jungs. Bin dankbar. – Dex

Antwort

2

Versuchen Sie Folgendes: Fügen Sie einfach dbms_output.put_line ('') oder dbms_output.new_line am Ende der Schleife hinzu.

declare 
v_name varchar(30); 
v_len number; 
v_number number; 
    BEGIN 

    v_name := :name; 
    v_number := length(v_name); 
    while v_number > 0 
    loop 
     dbms_output.put(v_number||'::'||substr(v_name,v_number,1)|| ' '); 
     v_number := v_number - 1; 
    END loop; 

    dbms_output.new_line; 
    end; 

P.S. Bitte verwenden Sie '&' für die Substitutionsvariable (&name) in pl/sql, da diese Funktion von SQL * Plus unterstützt wird. Verwenden Sie Bind-Variable wie folgt stattdessen :name

+1

Dies funktioniert, aber ist es nicht besser, einfach eine VARCHAR2-Zeichenfolge in der Schleife zu erstellen und die gesamte Zeichenfolge mit einem PUT_LINE-Aufruf gleichzeitig in den Ausgabepuffer zu schreiben? – mathguy

+1

das ist ein guter Vorschlag und eine bessere Antwort. Aber meiner Meinung nach gebe ich ihm nur die Korrektur für seinen Code. Wenn er nach einer besseren Lösung oder einem Vorschlag gefragt hätte, hätte Ihre Antwort akzeptiert werden müssen, wenn Sie sie gepostet haben. sag nur. =) – brenners1302

1

DBMS_OUTPUT scheint nicht den Puffer zu leeren, bis eine neue Zeile gesendet wird; Sie können entweder DBMS_OUTPUT.PUT_LINE(NULL) oder DBMS_OUTPUT.NEW_LINE wie folgt verwenden:

SET SERVEROUTPUT ON; 
declare 
v_name varchar(30); 
v_len number; 
v_number number; 
begin 
    v_name := '&name'; 
    v_number := length(v_name); 
    while v_number > 0 
    loop 
    dbms_output.put(v_number||'::'||substr(v_name,v_number,1)); 
    v_number := v_number - 1; 
    end loop; 
    DBMS_OUTPUT.NEW_LINE; 
end; 
/
Verwandte Themen