CREATE FUNCTION文は、スタンドアロンのストアド・ファンクションを作成します。
必要な権限
CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)
SQL構文
CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName
[(argument [IN|OUT|IN OUT][NOCOPY] datatype [DEFAULT expr][,...])]
RETURN datatype [invoker_rights_clause] [DETERMINISTIC]
{IS|AS} plsql_function_body
invoker_rights_clause
の構文は次のとおりです。
AUTHID {CURRENT_USER|DEFINER}
invoker_rights_clause
とDETERMINISTIC
は任意の順序で指定できます。
パラメータ
CREATE FUNCTION文には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
OR REPLACE |
ファンクションがすでに存在する場合に再作成するには、OR REPLACE を指定します。 この句を使用して、削除および再作成せずに既存のファンクションの定義を変更します。 ファンクションを再作成すると、そのファンクションはTimesTenで再コンパイルされます。 |
FunctionName |
ファンクションの名前。 |
argument |
引数またはパラメータの名前。 ファンクションに0以上のパラメータを指定できます。パラメータを指定する場合は、パラメータのデータ型を指定する必要があります。データ型はPL/SQLデータ型である必要があります。
PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
IN| OUT |IN OUT |
パラメータのモード。
|
NOCOPY |
可能なかぎり迅速にパラメータを渡すようにTimesTenに指示するには、NOCOPY を指定します。 レコード、索引付き表、OUTまたはIN OUTパラメータへのVARRAYなどの大きな値を渡す場合に、パフォーマンスを向上できます。 INパラメータでは、常にNOCOPY が渡されます。
|
DEFAULT expr |
パラメータのデフォルト値を指定するには、この句を使用します。キーワードDEFAULT のかわりに:= を指定できます。 |
RETURN datatype |
必須の句。 ファンクションは値を戻す必要があります。 ファンクションの戻り値のデータ型を指定する必要があります。
データ型の長さ、精度またはスケールは指定しないでください。 データ型はPL/SQLデータ型です。 PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
invoker_rights_clause |
ファンクションを所有するユーザーの権限でファンクションを実行するか、CURRENT_USER の権限でファンクションを実行するかを指定できます。
ファンクションを ファンクションの所有者の権限でファンクションを実行することを指定するには、
詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 |
DETERMINISTIC |
パラメータに同じ値を指定してファンクションをコールした場合に常に同じ結果値を戻すように指定するには、DETERMINISTIC を指定します。
|
IS|AS |
IS またはAS を指定して、ファンクションの本体を宣言します。 |
plsql_function_spec |
ファンクションの本体を指定します。 |
制限
次の句はTimesTenではサポートされません。
parallel_enable_clause
。 句を指定できますが、無効になります。
call_spec
句
AS EXTERNAL
CREATE FUNCTION文はレプリケートされません。
ファンクションを作成または置き換えた場合、ファンクションに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。
例
1つの入力パラメータを指定してファンクションget_sal
を作成します。 NUMBER型としてsalary
を戻します。
Command> CREATE OR REPLACE FUNCTION get_sal > (p_id employees.employee_id%TYPE) RETURN NUMBER IS > v_sal employees.salary%TYPE := 0; > BEGIN > SELECT salary INTO v_sal FROM employees > WHERE employee_id = p_id; > RETURN v_sal; > END get_sal; > / Function created.
関連項目
『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』