ORACLE/FUNCTION編

オラクルちょこっとリファレンス

HOME > FUNCTION編

FUNCTION(ファンクション/関数)

ORACLEでは事前定義関数(→関数編をご覧ください)が多数用意されていますが、こういった関数を自分で作成することができます。

ファンクションの作成

ファンクションの作成には、CREATE FUNCTION句を使用します。

CREATE FUNCTION構文
CREATE [OR REPLACE] FUNCTION ファンクション名(引数 IN データ型[, ...])
    RETURN 戻り値の型
  IS
    宣言部
  BEGIN
    処理部
  END
;
パラメータ 説明
OR REPLACE 既存のFUNCTIONを置き換える(更新)時に指定する
引数名 引数名を指定する
IN 値を受け取るだけの変数
ファンクションに値を渡す時に使います。
OUT 値を返すだけの変数
呼び出し元で変数をセットすると、ファンクション実行後にセットした変数に値が入ります。
プロシージャから値を受け取りたい時に使います。
INOUT 受け取った値を書き換えて返す変数
ファンクションに値を渡すとともに、値を受け取りたい時に使います。
データ型 引数のデータ型を指定する
 データ型についてはPL/SQL(宣言部)編をご覧ください。
宣言部 PL/SQL(宣言部)編をごらんください。
処理部 PL/SQL(実行部)編をごらんください。
例外部 PL/SQL(例外部)編をごらんください。
CREATE FUNCTION例文
--(例)引数に渡した値を2倍にして返すFUNCTIONを作成する CREATE FUNCTION tesf(dt IN NUMBER) RETURN NUMBER IS d NUMBER; BEGIN d := dt * 2; RETURN d; END; /
上記FUNCTIONの使用例
SELECT tesf(100) from dual;

ファンクションのソースを表示

ファンクションのソースを表示するには USER_SOURCEデータディクショナリを検索します。
(プロシージャのソース表示も同様の方法で表示できます。)
 データディクショナリとは?→データディクショナリ編

ソース表示構文
SELECT TEXT FROM USER_SOURCE WHERE NAME = 'ファンクション名';

FUNCTIONのソース確認例文
--(例)ファンクション(test_fnc)のソースを確認する。 SELECT TEXT FROM USER_SOURCE WHERE NAME = 'TEST_FUNC';

ファンクション名は必ず、大文字で指定してください。

ファンクションの削除

ファンクションの削除には DROP FUNCTION句を使用します。

DROP FUNCTION構文
DROP FUNCTION <ファンクション名>;

FUNCTION削除の例文
--(例)ファンクション(test_fnc)を削除する。 DROP FUNCTION test_fnc;

ファンクションの情報を表示する

ファンクションの情報を表示するには ALL_OBJECTSデータディクショナリビューを検索します。

ファンクションの情報を表示する
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION';

データディクショナリビューには、DBA_やUSER_で始まるものもあります。
 違いは参照できる範囲が異なります。

【ALL_OBJECTSの主要カラム】
カラム内容
OWNERオブジェクトの所有者
OBJECT_NAMEオブジェクト名
SUBOBJECT_NAMEサブオブジェクト名 (存在する場合のみ)
OBJECT_IDオブジェクトID
OBJECT_TYPEオブジェクトの種類 (TABLE/VIEW/FUNCTION/PROCEDUREなど)
CREATED作成日時
LAST_DDL_TIME変更日時
TIMESTAMP作成日時(文字列)
STATUSオブジェクトのステータス(VALID/INVALID)
TEMPORARY一時オブジェクトかどうか (Y/N)
GENERATEDシステムによって作成されたオブジェクトかどうか (Y/N)

ここで取り上げているカラムは、主要なカラムのみです。

ToTop