记得在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 过程已成功完成。
这个是原理.如果你想得出不同的值必须有其他的方法了.
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 过程已成功完成。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货