我在plsql中有一个简单的程序。基本上,当我使用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时,它不会抛出任何错误,但它只是给我消息: "完成匿名区块"
如果我做错了,请告诉我。
谢谢, 地塞米松。
答案 0 :(得分: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 :(得分: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;
/