FUNCTION文は、スタンドアロン・ファンクションまたはコール仕様を作成するか、または置き換えます。スタンドアロン・ファンクションは、データベースに格納されるファンクション(単一の値を戻すサブプログラム)です。FUNCTION文で作成するスタンドアロン・ファンクションは、PL/SQLブロックまたはパッケージで宣言および定義するファンクションとは異なります。後者の詳細は、「ファンクションの宣言および定義」を参照してください。コール仕様は、PL/SQLから起動できるようにJavaメソッドまたは第三世代言語(3GL)サブプログラムを宣言します。このようなメソッドまたはサブプログラムは、SQLのCALL文を使用して起動することもできます。コール仕様は、起動時に起動するJavaメソッドまたは共有ライブラリ内の名前付きファンクションをデータベースに指示します。引数および戻り値に対して実行する型変換もデータベースに指示します。注意:ストアド・ファンクションは、副作用を制御する特定の規則に従っている場合にのみ、SQL文からコールできます。詳細は、「サブプログラムの副作用」を参照してください。PROCEDUREシステム権限が必要です。PROCEDUREシステム権限が必要です。コール仕様を起動するには、追加の権限が必要になる場合があります。Cコール仕様の場合には、Cライブラリに対するEXECUTE権限が必要です。FUNCTION文をOracleプリコンパイラ・プログラム内に埋め込むには、キーワードEND-EXECの後に特定の言語の埋込みSQL文の終了記号を付けて文を終了する必要があります。関連項目:前述の前提条件の詳細は、次のマニュアルを参照してください。REPLACEファンクションが存在する場合は、ファンクションを再作成し、再コンパイルします。再定義する前のファンクションに対する権限を付与されていたユーザーは、権限を再付与される必要なく、ファンクションにアクセスできます。ファンクション索引がファンクションに依存している場合は、データベースによってその索引にDISABLEDのマークが付けられます。schemaファンクションが含まれているスキーマの名前。function_name作成するファンクションの名前。注意:SQL*Moduleによって生成されたスタブを使用してストアド・サブプログラムを起動する場合、ストアド・サブプログラム名は、起動側ホストの3GL言語(AdaやCなど)の有効な識別子である必要もあります。datatypedatatypeには、ファンクションの戻り値のデータ型を指定します。戻り値は、PL/SQLでサポートされているすべてのデータ型にすることができます。SQLでは、BOOLEANパラメータまたは戻り値を持つファンクションの起動はサポートされていません。したがって、ユーザー定義ファンクションを起動するSQL文の場合は、数値(0または1)または文字列(TRUEまたはFALSE)を戻すように設計する必要があります。データ型で長さ、精度または位取りを指定することはできません。戻り値の長さ、精度または位取りは、ファンクションがコールされた環境からデータベースによって導出されます。戻り型がANYDATASETであり、問合せのFROM句でファンクションを使用する場合は、PIPELINED句を指定し、ファンクションの実装タイプの一部としてdescribeメソッド(ODCITableDescribe)を定義する必要もあります。NULLなどでは制約することができません。関連項目:PL/SQLデータ型の詳細は、第3章「PL/SQLのデータ型」を参照してください。Databaseデータ・カートリッジ開発者ガイド』を参照してください。invoker_rights_clauseプロシージャのAUTHIDプロパティを指定します。AUTHIDプロパティの詳細は、「実行者権限および定義者権限(AUTHIDプロパティ)」を参照してください。DETERMINISTICファンクションがそのパラメータの同じ値でコールされたときに常に同じ結果値を戻すことを示します。REWRITEとマークされたマテリアライズド・ビューの問合せからファンクションを起動する場合に指定する必要があります。データベースでは、このようなコンテキストの1つで決定的ファンクションが検出されると、ファンクションが再実行されるのではなく、以前に計算した結果の使用が可能なかぎり試行されます。その後、このファンクションのセマンティクスを変更する場合は、依存するすべてのファンクション索引およびマテリアライズド・ビューを手動で再構築する必要があります。パッケージ変数を使用するファンクション、またはファンクションから戻される結果に影響を与える可能性のある方法でデータベースにアクセスするファンクションを定義する場合は、この句を指定しないでください。データベースでファンクションが再実行されない場合、この句を指定しなかった結果は取得されません。DETERMINISTIC句の使用は、次のセマンティック規則によって制御されます。スキーマレベルのサブプログラムDETERMINISTICを宣言できます。パッケージレベルのサブプログラムDETERMINISTICは、パッケージ仕様部では宣言できますが、パッケージ本体では宣言できません。(別のサブプログラム内またはパッケージ本体内で宣言される)プライベートのサブプログラムDETERMINISTICは宣言できません。DETERMINISTICサブプログラムは、コールされるプログラムがDETERMINISTICを宣言されているかどうかに関係なく、別のサブプログラムを起動できます。Databaseデータ・ウェアハウス・ガイド』を参照してください。SQL言語リファレンス』を参照してください。parallel_enable_clauseパラレル問合せ操作のパラレル実行サーバーからファンクションを実行できることを示します。このファンクションでは、パッケージ変数などのセッション状態は使用しないでください(このような変数がパラレル実行サーバー間で共有されているとはかぎらないためです)。CURSORデータ型のファンクションでのみ使用します。CURSOR引数からファンクションへの入力のパーティション化を定義できます。ファンクションへの入力のパーティション化は、ファンクションが問合せのFROM句内のテーブル・ファンクションとして使用された場合の問合せのパラレル化の方法に影響します。ANYは、データをパラレル実行サーバー間でランダムにパーティション化できることを示します。指定した列リストにRANGEまたはHASHパーティション化を指定することもできます。注意:テーブル・ファンクションの弱いカーソル変数引数をパーティション化するには、RANGEやHASHではなく、ANYのみを使用します。オプションのstreaming_clauseを使用すると、指定した列リストでパラレル処理を順序付けまたはクラスタ化できます。BYは、パラレル実行サーバー上の行はローカルで順序付けする必要があることを示します。BYは、パラレル実行サーバー上の行に、column_listで指定されたキー値と同じキー値が必要であることを示します。CURSORパラメータの名前を示します。CURSOR引数によって戻される列を参照します。Databaseデータ・カートリッジ開発者ガイド』を参照してください。}テーブル・ファンクションの結果を反復的に戻すようにデータベースに指示します。テーブル・ファンクションは、コレクション型(ネストした表またはVARRAY)を戻します。問合せのFROM句のファンクション名の前にTABLEキーワードを使用して、テーブル・ファンクションを問い合せます。TABLE(function_name(...))これによって、ファンクションで行が生成されると、データベースによってその行が戻されます。...)は、PL/SQLファンクション本体でPIPEキーワードを使用する必要があります。このキーワードは、コレクション全体を単一の値として戻すのではなく、コレクションの個々の要素をファンクションから戻すようにデータベースに指示します。implementation_type句を指定できます。実装タイプは、ODCITableインタフェースを実装する必要があり、テーブル・ファンクションの作成時に存在している必要があります。この句は、C++やJavaなどの外部言語で実装されるテーブル・ファンクションに便利です。ファンクションの戻り型がANYDATASETである場合は、ファンクションの実装タイプの一部としてdescribeメソッド(ODCITableDescribe)も定義する必要があります。Databaseデータ・カートリッジ開発者ガイド』を参照してください。USINGこのファンクションを集計ファンクションまたは行のグループを評価して単一行を戻すファンクションとして指定します。BY句で指定できます。問合せでユーザー定義の集計ファンクションを指定すると、分析ファンクション(問合せ結果セットで機能するファンクション)として処理できます。analytic_clause構文を使用します。SQL言語リファレンス』を参照してください。USING句には、ファンクションの実装タイプの名前を指定します。この実装タイプは、ODCIAggregateサブプログラムの実装が含まれているADTにする必要があります。schemaを指定しない場合、実装タイプは自分のスキーマ内に存在するとみなされます。この句を指定する場合、ファンクションに対して指定できる入力引数は1つのみです。Databaseデータ・カートリッジ開発者ガイド』を参照してください。Databaseデータ・カートリッジ開発者ガイド』を参照してください。bodyファンクションの必須の実行部、およびオプションでファンクションの例外処理部。declare_sectionファンクションのオプションの宣言部。宣言は、ファンクションに対してローカルであり、bodyで参照でき、ファンクションが実行を完了すると消滅します。call_specCプロシージャ名またはJavaメソッド名、パラメータ型および戻り型を、対応するSQLにマップします。java_declarationでは、stringはメソッドのJava実装を示します。LIBRARY文」によって作成されたライブラリを識別します。Java開発者ガイド』を参照してください。Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。EXTERNAL下位互換性のためにのみサポートされている、Cファンクションの非推奨の宣言方法。C構文を使用することをお薦めします。次の文は、サンプルの表oe.ordersにファンクションget_balを作成します。END;/get_balファンクションは、指定した口座の残高を戻します。このファンクションを起動する場合は、引数acc_no(残高を確認する口座の番号)を指定する必要があります。acc_noのデータ型はNUMBERです。このファンクションは口座の残高を戻します。FUNCTION文にRETURN句を指定すると、戻り値のデータ型がNUMBERになります。このファンクションは、SELECT文を使用して、引数acc_noで識別される行のbalance列をorders表で選択します。次に、RETURN文を使用して、ファンクションがコールされた環境にこの値を戻します。前述の例で作成したファンクションは、SQL文で使用できます。2519次に示す仮定の文は、Cサブプログラムc_get_valを外部ファンクションとして登録するPL/SQLスタンドアロン・ファンクションget_valを作成します。(この例ではパラメータを省略しています。次の文は、数値を集計するSecondMaxという名前の集計ファンクションを作成します。ADTのSecondMaxImplサブプログラムに、ODCIAggregateサブプログラムの実装が含まれていることを想定しています。Databaseデータ・カートリッジ開発者ガイド』を参照してください。このような集計ファンクションは、サンプル表hr.employeesを問い合せる次の文のような問合せで使用します。次の文は、DBMS_LOB.GETLENGTHプロシージャを使用してCLOB列の長さを戻すファンクションを作成します。SQL言語リファレンス』を参照してください。Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。