ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

ファンクション宣言と定義

ファンクションとは、単一の値を戻すサブプログラムのことです。 ファンクションは、起動する前に定義および宣言する必要があります。 ファンクションは、宣言と定義を同時に行うか、または最初に宣言して、後で同じブロック内で定義することができます。


注意:

このトピックの内容は、PL/SQLブロックまたはパッケージ内で宣言および定義するファンクションに適用されます。このファンクションは、CREATE FUNCTION文を使用して作成するスタンドアロン・ストアド・ファンクションとは異なります。

構文

function_declaration ::=

function_declaration
function_declaration.gifの説明

function_heading ::=

function_heading
function_heading.gifの説明

parameter_declaration ::=datatype ::=

function_definition ::=

function_definition
function_definition.gifの説明

body ::=declare_section ::=

result_cache_clause ::=

result_cache_clause
result_cache_clause.gifの説明

キーワードとパラメータの説明

body

ファンクションの必須の実行部、およびオプションでファンクションの例外処理部。

RETURN文へ導く少なくとも1つの実行パスが必要です。実行パスがないと、ランタイム・エラーが発生します。

data_source

データベース表またはデータベース・ビューの名前。

declare_section

ファンクションのオプションの宣言部。 宣言は、ファンクションに対してローカルであり、bodyで参照でき、ファンクションが実行を完了すると消滅します。

DETERMINISTIC

DETERMINISTICを指定して、ファンクションが、そのパラメータの同じ値によって起動されたときは常に同じ結果値を戻すことを示します。 これは、オプティマイザが冗長ファンクション・コールを回避するのに役立ちます。ストアド・ファンクションが以前に同じ引数で起動された場合、オプティマイザは、以前の結果を使用できます。

コールごとに結果が変わる可能性があるため、結果をセッション変数またはスキーマ・オブジェクトの状態に依存するファンクションには、DETERMINISTICを指定しないでください。 かわりに、ファンクションの結果をキャッシュすることを考慮してください(「結果がキャッシュされるファンクションによるセッション固有の設定の処理」および「結果がキャッシュされるファンクションによるセッション固有のアプリケーション・コンテキストの処理」を参照)。

DETERMINISTICファンクションのみを、ファンクションベースの索引またはクエリー・リライトを使用可能にしたマテリアライズド・ビューから起動できます。 DETERMINISTICオプションの詳細および制限については、「CREATE FUNCTION文」を参照してください。


参照:

『Oracle Database SQL言語リファレンス』のCREATE INDEX文に関する項

function_declaration

ファンクションを宣言しますが、定義はしません。 定義は、同じブロックまたはサブプログラム内に後で宣言として存在している必要があります。

ファンクション宣言は、ファンクション仕様部とも呼ばれます。

function_definition

同じブロックまたはサブプログラムですでに宣言済のファンクションを定義するか、またはファンクションを宣言および定義します。

function_name

宣言または定義するファンクションに付ける名前。

IN、OUT、IN OUT

仮パラメータのアクションを定義するパラメータ・モード。 パラメータ・モードの概要は、表8-1を参照してください。

NOCOPY

NOCOPYを指定すると、可能なかぎりすぐにこの引数を渡すようにデータベースに指示できます。 この句によって、レコード、索引付き表、VARRAYなどの大きい値をOUTまたはIN OUTパラメータに渡す場合にパフォーマンスを大幅に向上させることができます。 INパラメータ値は、常にNOCOPYに渡されます。

このような効果がないコールもあります。 NOCOPYは、このような効果が発生しても問題がない場合にのみ使用する必要があります。

parameter_name

宣言する仮パラメータの名前。この名前は、bodyで参照できます。

PIPELINED

PIPELINEDは、テーブル・ファンクションの結果を反復的に戻すことを指定します。 テーブル・ファンクションは、SQLデータ型の要素を含むコレクション型(ネストした表またはVARRAY)を戻します。 SQL問合せのFROM句のファンクション名の前にTABLEキーワードを使用して、テーブル・ファンクションを問い合せることができます。 詳細は、「パイプライン・テーブル・ファンクションによる複数変換の実行」を参照してください。

RELIES_ON

ファンクションの結果が依存するデータ・ソースを指定します。 詳細は、「PL/SQLファンクション結果キャッシュの使用」を参照してください。

RESULT_CACHE

ファンクションの結果をキャッシュします。 詳細は、「PL/SQLファンクション結果キャッシュの使用」を参照してください。

RETURN datatype

datatypeには、ファンクションの戻り値のデータ型を指定します。 戻り値は、PL/SQLでサポートされているすべてのデータ型にすることができます。 このデータ型は、NOT NULLなどでは制約することができません。

{ := | DEFAULT } expression

INパラメータのデフォルト値を指定します。 ファンクションの実行者がパラメータの値を指定した場合、その起動のexpressionは評価されません(例8-7を参照)。 これ以外の場合、パラメータは、expressionの値に初期化されます。 その値とパラメータのデータ型には互換性が必要です。

関連トピック


参照:

SQL文および式からコールされるユーザー定義ファンクションの制限の詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。