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_で始まるものもあります。
違いは参照できる範囲が異なります。
カラム | 内容 |
---|---|
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) |
ここで取り上げているカラムは、主要なカラムのみです。