子育てエンジニアブログ

子育てに励むシステムエンジニア(SE)のブログ

PL/SQLの基本まとめ

最近業務ではOracle DBを使用することがあります。
Oracleには、PL/SQLというものがあると知ったのでそれについて自分なりにまとめてみました。
今回の内容は私が勉強したPL/SQLについての基本のまとめです。

PL/SQLとは

PL/SQL(Procedure Language/Structured Query Language)とは、オラクル社がSQLの手続き型拡張機能として提供する言語。
変数の利用やif、for、loopなどを記述することができます。

PL/SQLの構成

変数宣言

・DECLARE
DECLAREを使って変数宣言を行う。
書き方は「変数 型」。
「CONSTANT」というキーワードを使用すると、その変数は定数として扱われ値が変更できなくなります。
「変数 CONSTANT 型」

例)
・文字列

str VARCHAR(10);

・数値

num NUMBER(8,2);

・%TYPE属性
%TYPE属性を使用して、既存定義のテーブルの列と同じデータ型として変数宣言ができる。
変数名 表名.列名%TYPE ;

例)

aaa TEST.column%TYPE;

・%ROWTYPE属性
%ROWTYPE属性を使用して、表(またはビュー)の行構造を宣言できる。
変数名 表名%ROWTYPE;

例)

aaa TEST%TYPE;
処理部

・処理部は、
BEGIN〜END
で囲む。
・SELECT、INSERT、UPDATE、DELETEなどはそのままSQLを記述する。

・IF文
例)

IF1 THEN
  --処理1
ELSIF2 THEN
 --処理2
ELSE
 --他の場合の処理
END IF;

・CASE文
例)

CASE
  WHEN 式1 THEN
    --処理1
  WHEN 式2 THEN
    --処理2
  ELSE
    --他の場合の処理
END CASE;

・FOR文
FOR文は

FOR 変数 IN 下限値 .. 上限値 LOOP
処理内容
END LOOP;

という形式で記述する。

例)

FOR i IN 1..3 LOOP
    --繰り返し処理
END LOOP;
例外処理

例外処理は、EXCEPTIONを使用する。
例外処理で検知できる例外に種類がある。
よく出そうなものだけピックアップしてみた。

LOGIN_DENIED:ログインできない
VALUE_ERROR:数値のオーバーフローや NOT NULL 制約に違反
DUP_VAL_ON_INDEX:一意制約違反
OTHERS:その他の例外

コメント

コメントは
文字の前に「--」をつける。
例)

--コメント

複数行のコメントは「/*」と「*/」 で囲む。
例)

/* 
ここが
複数行
コメント
可能
*/
PL/SQLブロックの実行

PL/SQLの処理部(BEGIN〜ENDで囲んだところ)を実行するにはENDの後で「/」を入力する必要がある。

コマンドライン出力

コンソール画面に文字列を出力するには次のように記述します。

DBMS_OUTPUT.PUT_LINE('文字列を出力');

また、ログを出力するにはDBMS_OUTPUTからの出力を有効にする必要があります。
そのため出力処理の前で、
SET SERVEROUT ON
としておく必要があります。
(1度記述すればよい)

PL/SQLの書き方まとめ(テンプレート)

PL/SQLの書き方まとめです。

--DBMS_OUTPUTからの出力を有効にする
SET SERVEROUT ON 

DECLARE
  --変数宣言をします。
  <変数宣言>
BEGIN
  --処理を記述します。
  <処理>
EXCEPTION
  --例外処理を記述します。
 WHEN <例外名> THEN
   <例外処理>
END;
/