全部博文(136)
分类: Oracle
2008-04-11 14:58:17
这里是培训时使用到的一些例子:
/*################################################
试验
################################################*/
/************************************************
测试一:NULL的初级认识
************************************************/
SQL> set serveroutput on SQL> declare 2 v_1 varchar2(10); 3 begin 4 if v_1 is null then 5 dbms_output.put_line('v_1 is null'); 6 end if; 7* end; SQL> / v_1 is null PL/SQL 过程已成功完成。 SQL> |
/************************************************
测试二:NULL只能用“IS”来判断,而不能用“=”
************************************************/
SQL> declare 2 v_1 varchar2(10); 3 begin 4 if v_1 = null then 5 dbms_output.put_line('v_1 is null'); 6 end if; 7* end; SQL> / PL/SQL 过程已成功完成。 SQL> |
/************************************************
测试三:字符串拼接中如果有NULL,不受影响
************************************************/
SQL>declare 2 v_1 varchar2(10); 3 v_2 varchar2(10); 4 v_3 varchar2(10); 5 begin 6 v_2 := 'adsf'; 7 v_3 := v_2 || v_1; 8 dbms_output.put_line('v_3 :' || v_3); 9* end; SQL> / v_3 :adsf PL/SQL 过程已成功完成。 SQL> |
/************************************************
测试三补充:
字符变量中的''就是NULL
NULL是可以被赋值的
************************************************/
SQL> declare 2 v_1 varchar2(10); 3 begin 4 v_1 := ''; 5 if v_1 is null then 6 dbms_output.put_line('v_1 is null'); 7 end if; 8* end; SQL> / v_1 is null PL/SQL 过程已成功完成。 SQL> declare 2 v_1 varchar2(10); 3 begin 4 v_1 := null; 5 if v_1 is null then 6 dbms_output.put_line('v_1 is null'); 7 end if; 8* end; SQL> / v_1 is null PL/SQL 过程已成功完成。 SQL> |
/************************************************
测试四:NULL的数值运算会导致结果为NULL
************************************************/
SQL> declare 2 n_1 number(10); 3 n_2 n_1%type; 4 n_3 n_2%type; 5 begin 6 n_2 := 999; 7 n_3 := n_1 + n_2; 8 if n_3 is null then 9 dbms_output.put_line('n_3 is null'); 10 else 11 dbms_output.put_line('n_3 is not null'); 12 end if; 13* end; SQL> / n_3 is null PL/SQL 过程已成功完成。 SQL> |
/*################################################
试验
################################################*/
/************************************************
测试一:从表test4中取出数据,保存到变量v_grade中。由于数据为NULL,导致变量为NULL。
SQL> select * from test4 where score=66;
SCORE GRADE
----------------- ----------------
66
SQL>
************************************************/
SQL> declare 2 v_grade test4.grade%type; 3 begin 4 select grade 5 into v_grade 6 from test4 7 where score = 66; 8 if v_grade is null then 9 dbms_output.put_line('v_grade is null'); 10 end if; 11* end; SQL> / v_grade is null PL/SQL 过程已成功完成。 |
/************************************************
测试二:自己实现NVL函数
结论:记得使用函数NVL。
************************************************/
create or replace function fun_my_nvl( prm_old_value IN VARCHAR2, prm_new_value IN VARCHAR2 ) return varchar2 IS begin IF prm_old_value IS NULL THEN RETURN prm_new_value; ELSE RETURN prm_old_value; END IF; end fun_my_nvl; |
/************************************************
测试三:总结:在程序中小心地避免NULL
************************************************/
SQL> declare 2 v_grade test4.grade%type; 3 begin 4 select nvl(grade, 'E') 5 into v_grade 6 from test4 7 where score = 66; 8 if v_grade is null then 9 dbms_output.put_line('v_grade is null'); 10 end if; 11 dbms_output.put_line('v_grade:' || v_grade); 12 end; 13 / v_grade:E PL/SQL 过程已成功完成。 SQL> |
/*################################################
试验6.3:测试goto + null => continue。
目的:求100以内的奇数和
################################################*/
declare n_sum number(10) := 0; begin for n_number in 1..100 loop if mod(n_number, 2) = 0 then goto next_loop; end if; n_sum := n_sum + n_number; < null; end loop; dbms_output.put_line(n_sum); end; |