CREATE PROCEDURE文は、スタンドアロンのストアド・プロシージャを作成します。
必要な権限
CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)
CREATE [OR REPLACE] PROCEDURE [Owner.]ProcedureName
[(argument [IN|OUT|IN OUT][NOCOPY] datatype [DEFAULT expr][,...])]
[invoker_rights_clause] [DETERMINISTIC]
{IS|AS} plsql_procedure_body
invoker_rights_clauseの構文は次のとおりです。
AUTHID {CURRENT_USER|DEFINER}
invoker_rights_clause
とDETERMINISTIC
は任意の順序で指定できます。
パラメータ
CREATE PROCEDURE文には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
OR REPLACE |
プロシージャがすでに存在する場合に再作成するには、OR REPLACE を指定します。 この句を使用して、プロシージャを削除および再作成せずに既存のプロシージャの定義を変更します。 プロシージャを再作成すると、そのプロシージャはTimesTenで再コンパイルされます。 |
ProcedureName |
プロシージャの名前。 |
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 値を指定するには、この句を使用します。キーワードDEFAULT のかわりに:= を指定できます。 |
invoker_rights_clause |
プロシージャを所有するユーザーの権限およびデータベースでプロシージャを実行するか、CURRENT_USER の権限およびデータベースでプロシージャを実行するかを指定できます。
プロシージャを プロシージャが格納されているデータベースの所有者の権限でプロシージャを実行することを指定するには、
詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 |
DETERMINISTIC |
パラメータに同じ値を指定してプロシージャをコールした場合に常に同じ結果値を戻すように指定するには、DETERMINISTIC を指定します。
|
IS|AS |
IS またはAS を指定して、プロシージャの本体を宣言します。 |
plsql_procedure_body |
プロシージャの本体を指定します。 |
制限
次の句はTimesTenではサポートされません。
call_spec
句
AS EXTERNAL句
CREATE PROCEDURE文はレプリケートされません。
説明
PL/SQLプロシージャのネームスペースは、TimesTen組込みプロシージャとは異なります。 PL/SQLプロシージャは、TimesTen組込みプロシージャと同じ名前で作成できます。
プロシージャを作成または置き換えた場合、プロシージャに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。
例
プロシージャquery_emp
を作成して、従業員に関する情報を取得します。 employee_id
171をプロシージャに渡し、2つのOUTパラメータに対してlast_name
およびsalary
を取得します。
Command> CREATE OR REPLACE PROCEDURE query_emp > (p_id IN employees.employee_id%TYPE, > p_name OUT employees.last_name%TYPE, > p_salary OUT employees.salary%TYPE) IS > BEGIN > SELECT last_name, salary INTO p_name, p_salary > FROM employees > WHERE employee_id = p_id; > END query_emp; > / Procedure created.
関連項目
『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』