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。
我尝试了所有我能想到的仍有这个问题的东西。
答案 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