學習《PLSQL開發指南》筆記——條件和序列控制

genweihua發表於2014-11-02

一、三種條件語句
1、if-then-end if
2、if-then-else-end if
2、if-then-elsif-then-else-end if
注意:1、條件是boolean型,null和任何型別的運算都是false;
      2、來自資料庫的值,要關注null問題:is null,nvl;
      3、多條件,也需要排除null值,and或者or,只需要其中一個條件true或者false,就可以判斷結果。
      begin
        if null or null
          then
            dbms_output.put_line('null值的運算結果是true!');
        else
          dbms_output.put_line('null值得運算結果是false!');
        end if;
        end;
二、case 語句和case表示式
    1、case語句
    declare
      v_case varchar2(10) := 'ding';
    begin
      case v_case
        when 'd' then
          dbms_output.put_line('選中的字母是:' || v_case);
        when 'ding' then
          dbms_output.put_line('選中的字母是:' || v_case);
        else
          dbms_output.put_line('沒有選中字母');
      end case;
    end;
    2、case 語句
    declare
      v_case varchar2(10) := 'd';
    begin
      case
        when v_case = 'd' then
          dbms_output.put_line('選中的字母是:' || v_case);
        when v_case = 'ding' then
          dbms_output.put_line('選中的字母是:' || v_case);
        else
          dbms_output.put_line('沒有選中字母');
      end case;
    end;
    3、case 語句
    declare
      v_num int := 1500;
    begin
      case
        when v_num >= 1000 then
          case
            when v_num >= 1200 then
              dbms_output.put_line('傳入的資料大於1200!');
            when v_num >= 1500 then
              dbms_output.put_line('傳入的資料大於1500!');
            when v_num >= 4000 then
              dbms_output.put_line('傳入的資料大於4000!');
          end case;
          when v_num < 1000 then dbms_output.put_line('傳入的值小於1000!');
      end case;
      end;
     4、case 表示式:轉換結果,可以給函式傳引數:case when then else end;
     declare
       t_bl boolean := true;
       f_bl boolean := false;
       n_bl boolean;
    
       function v_func(v_flag in boolean) return varchar2 is
       begin
         return case v_flag when true then 'True' when false then 'Else' else 'null' end;
       end;
     begin
       dbms_output.put_line(v_func(t_bl));
       dbms_output.put_line(v_func(f_bl));
       dbms_output.put_line(v_func(n_bl));
     end;
case 表示式和case語句的區別
  1、case 語句以end case 結尾;case 表示式以end結尾;
  2、case 語句then 以後有分號;case 表示式沒有;
  3、case 語句中沒有else 會報錯誤;case表示式沒有else則返回null;
  4、case 表示式以end結尾可以參與到運算中;
最後的例子:
declare
  dump_mesg varchar2(20);
begin
  select case
           when dummy = 'X' then
            'dual is OK!'
           else
            'dual is messed up!'
         end
    into dump_mesg
    from dual;

  dbms_output.put_line(dump_mesg);
end;
      

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22275400/viewspace-1317918/,如需轉載,請註明出處,否則將追究法律責任。

相關文章