记得在oracle在解析之前,首先替换所有的&值,然后再解析.所以结果当然是这个了.
这个是原理.如果你想得出不同的值必须有其他的方法了.
SQL> declare
  2  num int;
  3  m int DEFAULT 1;
  4  n int DEFAULT 1;
  5  begin
  6  num:=to_number(&i);
  7  for i in 1..num
  8  loop
  9  m:=to_number(&m);
 10  n:=to_number(&n);
 11  DBMS_OUTPUT.PUT_LINE('m='||m);
 12  DBMS_OUTPUT.PUT_LINE('n='||n);
 13  end loop;
 14  end;
 15  /
输入 i 的值:  3
原值    6: num:=to_number(&i);
新值    6: num:=to_number(3);
输入 m 的值:  3
原值    9: m:=to_number(&m);
新值    9: m:=to_number(3);
输入 n 的值:  3
原值   10: n:=to_number(&n);
新值   10: n:=to_number(3);
m=3
n=3
m=3
n=3
m=3
n=3PL/SQL 过程已成功完成。