Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > PL/SQL_选择语句
【标  题】:PL/SQL_选择语句
【关键字】:PL/SQL_
【来  源】:http://www.cublog.cn/u/11680/showart.php?id=117723

PL/SQL_选择语句

Your Ad Here
   控制語句幾乎是所有面向過程語言的核心,PL/SQL也是一程過程化語言,學好PL/SQL,掌握PL/SQL中幾種控制語句的語法是必不可好的。
 
PL/SQL和其它過程化語言一樣,主要有三種結構控制語句,他們分別為:
 
1,順序結構;
2,選擇結構;
3,循環結構;
 
   順序結構比較簡單了,我們在寫PL/SQL時多注意一下實際需要就行了。我們先來看看選擇結構。
 

選擇結構語法:
主要有 IF判斷CASE判斷;
 
1,IF判斷
第一種
   if conditional then    --條件為真執行statment
 statement                --條件為NULL或否時執行 end if 以後的語句
   end if;
 
第二種
   if conditional then    --條件為真執行statement1
statement1                --條件為NULL或否時執行statement2
   else
statement2
   end if;
第三種
   if conditional1 then    --先判斷條件1
statement1                  --若為真執行statement1  
   elsif conditional2 then --再判斷條件2
statement2                 --若為真執行statement2
  ......                   
  ......
  else                     --若以上條件都為NULL或否
statementn                 --執行statementn
  end if;
 
2,CASE判斷
  case conditonal                --需要檢測的表達式
when decision1 then statement1   /*若上面的表達式值等於decision1執行statement1*/
when decision2 then statement2   /*若上面的表達式值等於decision2執行statement2*/
......
......
when decisionN then statementN   /*若上面的表達式值等於decisionN執行statementN*/
else  statementN+1               --若沒有匹配的decision執行statementN+1
end;
  注意:CASE語句中conditional和decision的數據類型必須一致,或相互兼容。
 
選擇結構中NULL值的判斷:
  在選擇結構中需要注要一點的就是NULL值的判斷,因為有時我們沒有注意NULL值的判斷會導致出現相反的結果。我們看以下兩個procedure,他們都可以判斷v_num1是否大於v_num2。

PROCEDURE CHK_NUM_1 (
              p_num1 in number,
              p_num2 in number,
              p_result  out varchar2
)
IS
     v_num1   number(2);
     v_num2   number(2);
     v_result varchar2(10);
BEGIN
  v_num1:=p_num1;
  v_num2:=p_num2;
 
  if v_num1>v_num2 then
    v_result:='YES';
  else
    v_result:='NO';
  end if;
p_result:=v_result;
dbms_output.put_line('the result is'||p_result );
END;

PROCEDURE CHK_NUM_2 (
              p_num1 in number,
              p_num2 in number,
              p_result  out varchar2
)
IS
     v_num1   number(2);
     v_num2   number(2);
     v_result varchar2(10);
BEGIN
  v_num1:=p_num1;
  v_num2:=p_num2;
 
  if v_num1<v_num2 then
    v_result:='NO';
  else
    v_result:='YES';
  end if;
p_result:=v_result;
dbms_output.put_line('the result is'||p_result );
END;
 
在邏輯上,chk_num_1和chk_num2一樣,只不過是換個表示方法。
例如:現在我們令
p_num1 = 5;
p_num2 = 3;
無論你用chk_num_1,還是chk_num_2得出的結果都是"YES".
 
但如果令:
p_num1 為空;(即為null)
P_num2 = 5;
則會出現兩種不同的結果,chk_num_1為"NO",而chk_num_2為"YES".
導致這種情況出現的原因是無論NULL和一個數的比較結果仍為NULL(NULL>5 = NULL)
因些會執行else以後的語句,而上面兩個procedure判斷順序又不一樣,所以出現了以上的兩種結果。
 
解決方法:
 在判斷之前先判斷一下是否有NULL值,將上面判斷部分加上一段:
if p_num1=null or p_num2 null then
  v_result:="parameter is NULL!";
if v_num1>num2 then 
    v_result:='YES';
  else
    v_result:='NO';
 
加上上面的判斷無論是chk_num_1或是chk_num_2都可以正確判斷p_num1和p_num2的大小。
 
 
 
 
日记 [2006年05月25日]数据备份中的常见命令:【上一篇】
PostgreSQL问题记录:【下一篇】
【相关文章】
  • PL/SQL DEVELOPER中的专用复制(Special Copy)
  • 不能用PL/SQL Dev登录
  • PL/SQL Developer 7.0 于 2006-1-23号已经发布了
  • 2006-03-01 PL/SQL Developer 7.0.1 发布了
  • pl/sql developer工具几点妙用
  • PL/SQL Packages and Types Reference 47
  • Oracle9i Supplied PL/SQL Packages and Types Refere
  • About %ROWTYPE in PL/SQL.
  • Oracle初学者笔记(十二)--PL/SQL1_基础
  • Oracle初学者笔记(十三)--PL/SQL2_异常处理和游标
  • 【随机文章】
  • 做广告的价值
  • 电子地图真的是百花齐放了——百度地图即将发布
  • C趣味程序百例(14)
  • 将“页面设置”请进右键菜单
  • 分页对象(vbscript版)
  • TD-SCDMA 小常识
  • 使用FileSystemObject如果避免安全警告?
  • 超频必读
  • 通信基础-1
  • 用NT Loader加载GRUB来启动Linux
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.