PL/SQLとは
- 正式名称は「Procedural Language/SQL」
- Oracleデータベース上で動作するプログラミング言語。
- 変数宣言、条件分岐(IF文)、繰り返し(LOOP, FORループ)など、一般的なプログラミング言語と同じような文法を持っている
これによりSELECT文の結果を変数に格納し、その結果の特定の値をIF文で判定しINSERTやUPDATEなどをループで1件ずつ実行するといった素のSQLだけでは難しい複雑な処理を実行できる。
PL/SQLの基本のひな型
DECLARE
-- 変数宣言
BEGIN
-- 処理
EXCEPTION
WHEN OTHERS THEN
-- 例外処理
END;
例文
TODO
テーブルからデータを取得して出力し、件数に応じて処理を分岐する例
変数への代入、IF文、FORループを使って例文を作成
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM TODO;
DBMS_OUTPUT.PUT_LINE('TODO件数: ' || v_count);
IF v_count > 0 THEN
FOR rec IN (SELECT * FROM TODO) LOOP
DBMS_OUTPUT.PUT_LINE('TODO: ID=' || rec.id || ', Name=' || rec.name || ', Status=' || rec.status);
END LOOP;
END IF;
END;
/
実行結果
TODO件数: 4
TODO: ID=2, Name=買い物に行く, Status=completed
TODO: ID=3, Name=レポート作成, Status=in_progress
TODO: ID=4, Name=メール返信, Status=completed
TODO: ID=5, Name=掃除する, Status=completed
ストアドプロシージャについて
- PL/SQLで作成した処理をOracleデータベースに名前付きオブジェクト(プロシージャ、ファンクション、パッケージ等)として登録したもの。
- 他のPL/SQLやSQL文から呼び出して実行可能
プロシージャ登録のポイント
PLSQLからストアドプロシージャとして登録するには先頭行を変えるだけでよい
PL/SQLは下記のように書くが
DECLARE
-- 変数宣言
BEGIN
-- 処理内容
END;
先頭だけDECLAREからCREATE OR PROCEDUREに置き換えるだけでストアドプロシージャとして登録可能
CREATE OR REPLACE PROCEDURE SAMPLE_PROC IS
-- 変数宣言
BEGIN
-- 処理内容
END;
登録すると下記のように他のSQLやPL/SQLから呼び出すことができる。
ブロックの最後には /
を付けて実行する。
BEGIN
SAMPLE_PROC;
END;
/