dbms_output.put不打印数据

时间:2016-03-30 02:06:26

标签: sql oracle plsql

我在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时,它不会抛出任何错误,但它只是给我消息: "完成匿名区块"

如果我做错了,请告诉我。

谢谢, 地塞米松。

2 个答案:

答案 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;
/