SAK 図書館
Oracle PL/SQL 編2 - 制御構造、条件式、判断、多重判定、ループ、例外処理
■条件式
= 等しい
< より小さい
> より大きい
<= 以下
>= 以上
<> 等しくない
!= 等しくない
not 否定
and かつ
or または
is null NULL 判定
■if 判断
if 条件 then
条件が真のとき
else
条件が偽りのとき
end if;
ブール変数が TRUE は、TRUE(真) 扱いである。
FALSE(偽り)。
if a = 1 and b = 2 then
c = 3;
d = 4;
end if
if a = 1 and (b = 2 or b = 3) then
c = 3;
d = 4;
end if
if a = 1 and (b = 2 or b = 3) then
null; /* なにもしない */
else
c = 3;
end if
文法 null; は、なにもしないと言う意味になります。
■case 多重判定 (Oracle9i より前は case として if...elsif を使用)
if 条件1 then
条件1 が真のとき
elsif 条件2 then
条件2 が真のとき
elsif 条件3 then
条件3 が真のとき
else
いずれの条件にも該当しないとき
end if;
** elseif ではなく、elsif なので注意。
■case 多重判定 (Oracle9i 以降)
case 式
when 値 then
...;
when 値 then
...;
else
...;
end case;
case
when 条件 then
...;
when 条件 then
...;
else
...;
end case;
** Oracle9i からの機能なので注意。
case a
when '0' then
...;
when '1' then
...;
else
...;
end case;
case
when a = '0' then
...;
when a > '1' then
...;
else
...;
end case;
■for ループ
for カウンタ in 開始値..終了値 loop
...
exit; /* ループ脱出 */
exit when 終了条件; /* 条件ループ脱出 */
end loop;
for カウンタ in reverse 終了値..開始値 loop
...
exit; /* ループ脱出 */
exit when 終了条件; /* 条件ループ脱出 */
end loop;
for i in 1..10 loop
...
end loop;
for i in reverse 1..10 loop
...
end loop;
■forall コレクションバルクバインド入力(bulk bind)
forall インデックス in 開始値..終了値
SQL文;
forall i in 1..10
delete from 受注m where 受注番号 = jcno(i);
■カーソル for ループ
for カーソル_rec in カーソル loop
(カーソル_rec.列名)
...
exit; /* ループ脱出 */
exit when 終了条件; /* 条件ループ脱出 */
end loop;
for cu_rec in cu loop
update prmf set jcsu = jcsu + cu_rec.jcsu where prno = cu_rec.prno;
end loop;
cu_rec cu%rowtype; は、自動的に宣言される。
つまり、cu_rec は、宣言せずに使用できる。
■while ループ
while ループ条件 loop
...
exit; /* ループ脱出 */
exit when 終了条件; /* 条件ループ脱出 */
end loop;
■loop ループ
loop
...
exit; /* ループ脱出 */
exit when 終了条件; /* 条件ループ脱出 */
end loop;
<< loop1 >>
loop
<< loop2 >>
loop
<< loop3 >>
loop
exit loop2 when 終了条件;
end loop;
end loop;
/* exit loop2 でここにくる */
end loop;
exit when 終了条件; の位置によって、ループを必ず 1 度は実行するか、
1 度も実行しないかの制御ができる。
■exception 例外処理
exception
when zero_divide then
null;
when value_error then
...
when others then
...
end;
文法 null; は、なにもしないと言う意味になります。
■exit 脱出
exit; /* ループ脱出 */
exit when 終了条件; /* 条件ループ脱出 */
return; /* 関数脱出 */
return 戻り値; /* 関数脱出 */
■Oracle PL/SQL 編資料
■SQL 基礎実地編資料
■SQL 基礎編資料
■SQL チューニング編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料