2016-03-30 2 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 он не вызывает никаких ошибок, но он просто дает мне сообщение: «анонимный блок завершен»

Пожалуйста, дайте мне знать, если что-то не так.

Thanks, 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. Пожалуйста, воздержитесь от использования «&» для переменной замещения (&name) в pl/sql, поскольку его функция поддерживается SQL * Plus. Вместо этого используйте переменную связывания, как это :name

+1

Это будет работать, но не лучше ли просто построить строку VARCHAR2 в цикле и разместить всю строку в выходном буфере сразу, с вызовом PUT_LINE? – mathguy

+1

Это хорошее предложение и лучший ответ. Но, на мой взгляд, я просто даю ему исправить его код. Если бы он попросил лучшего решения или предложения, ваш ответ должен был быть принят, если вы разместили его. просто говорю. знак равно – 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; 
/