1. 程式人生 > >oracle儲存過程----case條件控制語句的用法

oracle儲存過程----case條件控制語句的用法

oracle儲存過程—-case條件控制語句的用法

  今天又看到了另一種條件控制的方法case

case語句可以分為兩種型別:

  1. 一種是簡單的case語句,它給出一個表示式,並把表示式結果同提供的幾個可預見的結果作比較,如果比較成功,則執行對應的語句序列。
  2. 另一種是搜尋式的case語句。它會提供多個布林表示式,然後選擇第一個為true的表示式,執行對應的指令碼。
1.簡單case語句

  簡單case的語法如下:

create or replace procedure test_case_procedure(idnum varchar)
as
v_ly_ds ly_ds
%rowtype;
begin select * into v_ly_ds from ly_ds where id=idnum; case v_ly_ds.ly_nb when '女' then dbms_output.put_line('女人'); when '男' then dbms_output.put_line('男人'); else dbms_output.put_line('人妖'); end case; end;

  分別輸入 12 呼叫後的結果如下:

匿名塊已完成
男人

匿名塊已完成
女人

  從上邊來看,case 的簡單語法如下:

case 標誌
when
引數1 then 語句塊1; when 引數2 then 語句塊2; else 語句塊3; end case;

  執行過程中是,從上到下,依次拿when 後邊的引數,分別與上邊的標誌 進行比較,相等 則進入。
  另外,上邊的else 如果不寫,假如沒有符合條件的when ,則會丟擲CASE_NOT_FOUND 異常。

2.搜尋式case語句

  搜尋式case與簡單式差不多,只不過是搜尋式的這種,case後邊是沒有引數的。
將上邊的例子,修改後如下,即是搜尋式case:

create or replace procedure test_case_procedure(idnum varchar)
as v_ly_ds ly_ds%rowtype;
begin select * into v_ly_ds from ly_ds where id=idnum; case when v_ly_ds.ly_nb='女' then dbms_output.put_line('女人'); when v_ly_ds.ly_nb='男' then dbms_output.put_line('男人'); else dbms_output.put_line('人妖'); end case; end;

  執行過程與上邊相同。
  從上邊來看,搜尋式的case語法如下:

case 
when 條件1 then
語句塊1;
when 條件2 then
語句塊2;
else
語句塊3;
end case;

  執行過程中是,從上到下,依次看when 後邊的條件是否為truetrue 則進入。
  另外,上邊的else 如果不寫,假如沒有符合條件的when ,也會丟擲CASE_NOT_FOUND 異常。