🙄
【PL/SQL】プロシージャ
以前学習したサブプログラムのプロシージャについて復習メモしていきます。
プロシージャとは
データベース問合せ言語を使用してoracleデータベースにコンパイルしておき、必要なときに呼び出しができる処理のもとまりです。1つのSQL文では記述できない複雑な処理を書くことができます。
プロシージャの作成方法
基本形
// 仕様部
CREATE [OR REPLACE] PROCEDURE プロシージャ名[(引数名 {IN | OUT | INOUT} データ型,...)]
// 本体
IS
宣言部
BEGIN
処理部
EXCEPTION
例外処理部
END
;
1.仕様部
- プロシージャ名
PROCEDURE
の後に任意の名前を指定する - OR REPLACEオプション(省略可能)
同名のプロシージャが既に作成されている場合、上書きして作成する。 - パラメータの設定
プロシージャ名の後ろに()
を指定し、パラメータ名とそのパラメータのデータ型を定義できます。
パラメータの例
1.戻り値を設定する場合
プロシージャでは、直接的に戻り値をRETURN
できません。代わりに、戻り値用の引数を用意し、その変数に値をセットします。
例:システム日付をYYYYMMDD
形式の文字列で取得するプロシージャ
例1
CREATE OR REPLACE PROCEDURE FOOBAR(OUT_PARAM1 OUT CHAR) AS
BEGIN
OUT_PARAM1 := TO_CHAR(SYSDATE, 'YYYYMMDD');
END;
/
2.複数の戻り値を設定する場合
例:複数の戻り値を設定するには、カンマで区切って指定します。
例2
CREATE OR REPLACE PROCEDURE FOOBAR(OUT_PARAM1 OUT CHAR, OUT_PARAM2 OUT VARCHAR2) AS
BEGIN
OUT_PARAM1 := TO_CHAR(SYSDATE, 'YYYYMMDD');
OUT_PARAM2 := '2つめの戻り値';
END;
/
3.引数を設定する場合
入力されたパラメータに応じて処理を行いたいときは引数が必要です。
例:YYYYMMDD
形式の文字列を渡すと、その3ヶ月後の日付を返すプロシージャ
例3
CREATE OR REPLACE PROCEDURE FOOBAR(IN_PARAM1 IN CHAR, OUT_PARAM1 OUT CHAR) AS
BEGIN
OUT_PARAM1 := TO_CHAR(ADD_MONTHS(TO_DATE(IN_PARAM1), 3), 'YYYYMMDD');
END;
/
- IN | OUT | INOUT
パラメータ名とデータ型の間にパラメータのモードを指定します。
モード | 内容 |
---|---|
IN | 呼び出し側から値を受け取る(デフォルト) |
OUT | 呼び出し側に値を戻す |
IN OUT | 呼び出し側から値を受け取り、呼び出し側に値を戻す |
2.本体
プロシージャも無名のPL/SQLブロックと同様、宣言部、実行部、例外処理部から構成されています。
プロシージャの実行
プロシージャの実行方法は実行形態によって異なります。
1.PL/SQLブロックからプロシージャを実行
プロシージャの実行
BEGIN
プロシージャ名;
END;
PL/SQLブロックからプロシージャを実行する場合は、実行部に直接、プロシージャ名を指定して実行。
2.SQL*Plusからプロシージャを実行
プロシージャの実行
EXECUTE プロシージャ名
SQL*Plusからプロシージャを実行する場合は、EXECUTE
コマンドを使用する。
参考
プロとしてのOracle PL/SQL入門 第3版
Discussion