2016-03-30 26 views
1

私はplsqlで簡単なプログラムを持っています。基本的にプログラムにはエラーはありませんが、dbms_output.putを使用すると出力が表示されません。dbms_output.putはデータを出力しません

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; 

私はDBMS_OUTPUT.PUT_LINEを使用する時には、上記のプログラムは出力を生成しますが、出力はこれまでに、文字の後に改行を持っており、私が横一列に出力を持っていると思います。 dbms_output.putを使用してもエラーは発生しませんが、メッセージが表示されます。 「匿名ブロックが完了しました」

何か間違っている場合はお知らせください。

ありがとう、 Dex。

+0

ありがとうございます。感謝します。 – Dex

答えて

2

これを試してください:dbms_output.put_line( '')またはdbms_output.new_lineをループの最後に追加してください。

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. pl/sqlの置換変数(&name)は、SQL * Plusでサポートされている機能のため、 '&'を使用しないでください。代わりに、このようなバインド変数を使用してください。:name

+1

これはうまくいきますが、ループ内にVARCHAR2文字列を作成して、PUT_LINEを呼び出して文字列全体を一度に出力バッファに配置する方が良いのですか? – mathguy

+1

thats良い提案とより良い答えです。しかし、私の見解では、彼は彼のコードの修正を与えるだけです。彼がより良い解決法や提案を求めていたなら、あなたがそれを投稿したならばあなたの答えは受け入れられたはずです。ただ言って。 =) – brenners1302

1

DBMS_OUTPUT新しい行が送信されるまでバッファをフラッシュしないように見えます。 DBMS_OUTPUT.PUT_LINE(NULL)またはDBMS_OUTPUT.NEW_LINEを次のように使用できます。

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; 
/
関連する問題