ファンクションとは、値を戻すサブプログラムのことです。値のデータ型は、ファンクションのデータ型になります。ファンクションの起動(コール)は式の一部で、そのデータ型はファンクションのデータ型です。
ファンクションは、起動する前に定義および宣言する必要があります。最初に宣言して(function_declarationを使用)、後で同じブロック、サブプログラムまたはパッケージ内で定義する(function_definitionを使用)か、または宣言と定義を同時に行う(function_definitionを使用)ことができます。
注意: このトピックの内容は、ネストされたファンクションに適用されます。スタンドアロン・ファンクションの詳細は、「CREATE FUNCTION文」を参照してください。パッケージ・ファンクションの詳細は、「CREATE PACKAGE文」を参照してください。 |
ここでのトピック
構文
function_heading ::=
参照:
function_definition ::=
参照:
relies_on_clause ::=
セマンティクス
function_declaration
ファンクションを宣言しますが、定義はしません。定義は、同じブロック、サブプログラムまたはパッケージ内に後で宣言として存在している必要があります。
同じパラメータ値を使用してファンクションが起動されたときは常に同じ値を戻すことをオプティマイザに示します(この前提が真でない場合は、DETERMINISTIC
を指定すると予測できない結果になります)。以前に同じパラメータ値を使用してファンクションが起動されている場合、オプティマイザは再度ファンクションを起動するかわりに以前の結果を使用できます。
起動ごとに結果が変わる可能性があるため、結果がセッション変数またはスキーマ・オブジェクトの状態に依存するファンクションには、DETERMINISTIC
を指定しないでください。かわりに、ファンクションの結果をキャッシュすることを考慮してください(「結果がキャッシュされるファンクションによるセッション固有の設定の処理」および「結果がキャッシュされるファンクションによるセッション固有のアプリケーション・コンテキストの処理」を参照)。
DETERMINISTIC
ファンクションのみを、ファンクションベースの索引またはクエリー・リライトを使用可能にしたマテリアライズド・ビューから起動できます。DETERMINISTIC
オプションの詳細および制限については、「CREATE FUNCTION文」を参照してください。
DETERMINISTICの制限 ネストされたファンクションにはDETERMINISTIC
を指定できません。
PIPELINED
テーブル・ファンクションでのみ使用し、このファンクションがパイプラインであることを指定します。パイプライン・テーブル・ファンクションは、行を処理した直後に起動元に行を戻し、行の処理を継続します。起動元に(制御を戻さずに)行を戻すために、このファンクションでは「PIPE ROW文」を使用します。
PIPELINEDの制限 ネストされたファンクションにはPIPELINED
を指定できません。
注意: パイプライン・テーブル・ファンクションは、データベース・リンクを介して実行することはできません。パイプライン・テーブル・ファンクションの戻り型がユーザー定義のSQL型であり、単一データベース内でのみ使用可能であるためです(『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照)。パイプライン・テーブル・ファンクションの戻り型がPL/SQL型のように見える場合でも、そのPL/SQL型は実際にはデータベースによって対応するユーザー定義のSQL型に変換されます。 |
ファンクションのパラレル実行を可能にし、パラレルDML評価のスレーブ・セッションで安全に使用できるようにします。
PARALLEL_ENABLEの制限 ネストされたファンクションにはPARALLEL_ENABLE
を指定できません。
ファンクションの結果をキャッシュします。詳細は、「PL/SQLファンクション結果キャッシュ」を参照してください。
RESULT_CACHEの制限 ネストされたファンクションにはRESULT_CACHE
を指定できません。
function_heading
function
宣言または定義するファンクションの名前。
RETURN datatype
ファンクションが戻す値のデータ型を指定します。任意のPL/SQLデータ型を指定できます(第3章「PL/SQLのデータ型」を参照してください)。
datatypeの制限 このデータ型は、NOT
NULL
などでは制約することができません。datatype
が制約付きサブタイプの場合、戻された値はサブタイプの制約を継承しません(詳細は、「制約付きサブタイプの仮パラメータ」を参照)。
function_definition
すでに宣言済のファンクションを定義するか、またはファンクションの宣言と定義の両方を行います。
declare_section
ファンクションに対してローカルであり、body
で参照でき、ファンクションが実行を完了すると消滅する項目を宣言します。
body
ファンクションの必須の実行部およびオプションの例外処理部。実行部には、RETURN
文へ導く1つ以上の実行パスが必要であり、実行パスがないと、ランタイム・エラーが発生します。
call_spec、EXTERNAL
「call_spec」および「EXTERNAL」を参照してください。
call_spec、EXTERNALの制限 これらの句は、パッケージ仕様部またはパッケージ本体のみで使用できます。
relies_on_clause
ファンクションの結果が依存するデータ・ソースを指定します。それぞれのdata_source
がデータベース表またはデータベース・ビューの名前です。
注意:
|