Oracleのプロシージャ・ファンクション(PROCEDURE・FUNCTION)を作成する【PL/SQL】

Oracleのストアドには2種類あります。

  1. プロシージャ(PROCEDURE)・・・実行のみ
  2. ファンクション(FUNCTION)・・・戻り値あり

戻り値があるのがファンクションで、戻り値がないのがプロシージャです。



プロシージャを作成するCREATE PROCEDURE(PL/SQL)

プロシージャを作成するには「CREATE PROCEDURE~」を使用します。

「OR REPLACE」はUPDATEのことで、作成済みのプロシージャがあった場合に使用します。最初からつけておいた方が何かと便利です。

パラメータ

  • IN・・・値渡し
  • OUT・・・参照渡し

  • VARCHAR2・・・文字列型
  • NUMBER・・・数値型
  • DATE・・・日付型
  • テーブル%ROWTYPE・・・指定テーブルと同じ型
  • テーブル.列名%TYPE・・・指定テーブルの列と同じ型

例1. プロシージャを作成する

ここではシンプルなプロシージャを作成しました。

変数「rEmp」は「emp」テーブルと同じ型となります。「emp」テーブルの列がすべて使えます。ここでは「rEmp.empno」とし、「emp」テーブルの「empno」を使っています。

変数「tEmpNo」は「emp」テーブルの「empno」と同じ型となります。

例2. プロシージャを作成する(変数を渡してSQLを実行する)

ここではパラメータ(変数)「nEno」に値を渡して、それをPL/SQLプロシージャが受け取って、SQLのUPDATEを実行するプロシージャを作成しました。

ファンクションを作成するCREATE FUNCTION(PL/SQL)

ファンクションを作成するには「CREATE FUNCTION~」を使用します。

ファンクションの特徴は戻り値があることです。戻り値として「RETURN 型」を記述します。

例1. ファンクションを作成する

ここではNUMBER型を返す「funA」ファンクションを作成しました。「1」を返すシンプルなファンクションです。

例2. ファンクションを作成する(変数を渡してSQLを実行する)

ここではPL/SQLファンクション「funA」がパラメータ(変数)「nEno」に値をうけとります。「funA」でSELECTを実施し「salary」を取得し、その「salary」を返すファンクションを作成しました。

以上、Oracleのプロシージャ、ファンクション(PROCEDURE・FUNCTION)を作成するSQLでした。