HOME > PL/SQL(実行部)編

PL/SQL(実行部)

実行部では、メインの処理を記述します。何かしらのプログラミング言語を知っている方ならおなじみのIFやFORなどを用いて処理を記述していきます。

処理

基本的な処理の記述方法です。一般的なプログラミング言語の記述方法とほとんどおなじですね。

基本構成
IF文 【IF-THEN】
 IF 条件 THEN
  TRUE時の処理;
 END IF;

【IF-THEN-ELSE】
 IF 条件 THEN
  TRUE時の処理;
 ELSE
  FALSE時の処理;
 END IF;

【IF-THEN-ELSIF-ELSE】
 IF 条件A THEN
  条件AがTRUE時の処理;
 ELSIF 条件B THEN
  条件BがTRUE時の処理;
 ELSE
  それ以外時の処理;
 END IF;

 ※赤字 ELSEIFでないことに注意
CASE文 【CASE】
 CASE 条件
  WHEN 値1 THEN
   処理1;
  WHEN 値2 THEN
   処理2;
  ELSE
   処理3;
 END CASE;
FOR文 【FOR】
 FOR カウンタ名 IN [REVERSE] 下限値 .. 上限値 LOOP
  処理;
 END LOOP;

【カーソルFORループ】
 FOR カウンタ名 IN カーソル名 LOOP
  処理(FETCHした値は、カウンタ名.カラム名で取得できる)
 END LOOP;

 ※カーソルのOPEN,CLOSEは自動でやってくれるので不要。
WHILE文  WHILE 条件 LOOP
  処理
 END LOOP;
LOOP文  LOOP
  処理;
 EXIT (WHEN 条件);
 END LOOP;
CURSOR  OPEN カーソル名
 LOOP   FETCH カーソル名 INTO <%ROWTYPE変数名>
  EXIT WHEN カーソル名%NOTFOUND;
  DBMS_OUTPUT.PUT_LINE(変数名.カラム名);
 END LOOP;
 CLOSE カーソル名
バルクバインド  FORALL カウンタ変数 IN 下数..上数
  DML文;

カーソル属性

カーソルとは複数行取得できるSQLを発行した時に1行ずつ取得結果を取り出して処理したい場合に使用するものです。 カーソルの使用方法には2通りあり、明示的にカーソルをOPENしてFETCHして、CLOSEするような使い方と、 宣言部でカーソルを宣言して、カーソルFORループで回す方法があります。
カーソルの状態を取得したい時は前者では明示カーソル属性を、後者では暗示カーソル属性を使用すればカーソルの状態を取得できます。

明示カーソル属性
CURSOR%FOUND 1件以上のデータが見つかったらTRUE
CURSOR%NOTFOUND 1件もデータが見つからなかったらTRUE
CURSOR%ROWCOUNT 現在までの処理件数を返す
CURSOR%ISOPEN カーソルがOPENしていたらTRUE
暗示カーソル属性
SQL%FOUND DML文が1回でも実行されればTRUE
SQL%NOTFOUND DML文の処理対象がない場合はTRUE
SQL%ROWCOUNT 処理対象行数
SQL%ISOPEN 常にFALSE

索引付表属性

索引付表とは配列のことです。→PL/SQL(宣言部編)コレクション型TABLE参照
配列なので、○番目の要素を取得したいというような場合があると思いますが、そういう場合に索引付表属性を使用します。

索引付表属性
EXISTS(n) n番目があればTRUE
COUNT 要素数
DELETE 全要素の削除
FIRST 最初の要素の索引番号
LAST 最後の要素の索引番号
NEXT(n) nの1つ後ろの索引番号
PRIOR(n) nの1つ前の索引番号

その他

こんなのもあります。

その他いろいろ
ユーザ定義例外呼出1 RAISE 例外名;

宣言部で定義したEXCEPTIONを明示的に発生させる。
PL/SQL(宣言部編)データ型(例外型)参照
ユーザ定義例外呼出2 RAISE_APPLICATION_ERROR(エラーコード, 'メッセージ');

エラーコードとエラーメッセージを定義したエラーを明示的に発生させる。
(※定義できるエラーコードの範囲は-20000〜-20999まで)
PL/SQL内の情報を
コンソールに出力する
set serveroutput onを実行した上で、
DBMS_OUTPUT.PUT_LINE('文字列');とやる
※Oracleのユーティリティパッケージが使える環境が必要です。