执行如下程序段:
1: declare
2: myapple number(10);
3: begin
4: dbms_output.put_line(myapple);
5: myapple:=myapple+1;
6: dbms_output.put_line(myapple);
7: end;
这个程序段执行以后,什么结果都没有。
那么系统在执行第二句后,是否会为myapple分配空间,是否会为它赋默认初值?
如果没有初始值,那么第四句话不会有输出,但是为什么执行第五句话后仍然没有输出?
1: declare
2: myapple number(10);
3: begin
4: dbms_output.put_line(myapple);
5: myapple:=myapple+1;
6: dbms_output.put_line(myapple);
7: end;
这个程序段执行以后,什么结果都没有。
那么系统在执行第二句后,是否会为myapple分配空间,是否会为它赋默认初值?
如果没有初始值,那么第四句话不会有输出,但是为什么执行第五句话后仍然没有输出?
SQL> DECLARE
2 myapple NUMBER(10);
3 BEGIN
4 IF myapple IS NULL THEN
5 dbms_output.put_line('myapple=null');
6 END IF;
7 dbms_output.put_line(myapple);
8 myapple := myapple + 1;
9 IF myapple IS NULL THEN
10 dbms_output.put_line('myapple + 1=null');
11 END IF;
12 dbms_output.put_line(myapple);
13 END;
14 /
myapple=null
myapple + 1=nullPL/SQL 过程已成功完成。SQL> PL/SQL 过程已成功完成。
既然变量都没有赋值,那这句myapple:=myapple+1的执行结果肯定也是没有值的。个人认为这一句有问题,既然变量没赋值,+1也还是相当于没有赋值,因此第五句当然不会有输出
myapple number(10) := 1;
begin
dbms_output.put_line(myapple);
myapple:=myapple+1;
dbms_output.put_line(myapple);
end;
数据库底层实现 只是说下我的看法 myapple number(10);定义了变量 应该有所谓的分配空间(不过数据库里好像不这么说),至于初始值应该是null,第四句话不会有输出是因为null+number=null
请看下述过程:
SQL> set serveroutput on
SQL> exec dbms_output.put_line(null);PL/SQL procedure successfully completed.SQL> exec dbms_output.put_line(null+1);PL/SQL procedure successfully completed.SQL> exec dbms_output.put_line(1+null);PL/SQL procedure successfully completed.SQL> exec dbms_output.put_line(1+1);
2PL/SQL procedure successfully completed.SQL> set serveroutput off
SQL> exec dbms_output.put_line(1+1); PL/SQL procedure successfully completed.SQL>