无法获得输出

时间:2018-03-15 15:18:26

标签: plsql oracle11g

declare
num number(5);
rev number(5);
temp number(5);
begin 
num:=#
while num>0
loop
temp:=mod(num,10);
rev:=(rev*10)+temp;
num:=trunc(num/10);
end loop;
dbms_output.put_line('reversed no:' || rev);
end;

输出:

 Enter value for num: 456
 old   6: num:=#
 new   6: num:=456;
 reversed no:

    PL/SQL procedure successfully completed.

如果使用了set serveroutput on; 我正在使用oracle 11g。 我尝试了所有我能想到的仍有这个问题的东西。

1 个答案:

答案 0 :(得分:0)

问题在于:

rev := (rev * 10) + temp;

在调用该行时,rev为null。在Oracle中将数学运算符应用于空值时,结果始终为null。

您可以通过在声明变量时指定一个值来解决这个问题,即:

DECLARE
  num  NUMBER(5);
  rev  NUMBER(5) := 0;
  temp NUMBER(5);
BEGIN
  num := #
  WHILE num > 0
  LOOP
    temp := MOD(num, 10);
    rev  := (rev * 10) + temp;
    num  := trunc(num / 10);
  END LOOP;
  dbms_output.put_line('reversed no: ' || rev);
END;
/

reversed no: 654