SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK