14.11 CREATE PROCEDURE文
CREATE
PROCEDURE
文は、スタンドアロン・プロシージャまたはコール仕様を作成するか、または置き換えます。
スタンドアロン・プロシージャとは、データベースに格納されるプロシージャ(特定のアクションを実行するサブプログラム)です。
ノート:
CREATE
PROCEDURE
文で作成するスタンドアロン・プロシージャは、PL/SQLブロックまたはパッケージで宣言および定義するプロシージャとは異なります。詳細は、プロシージャの宣言および定義またはCREATE PACKAGE文を参照してください。
コール仕様は、PL/SQLからコールできるようにJavaメソッドまたはC言語プロシージャを宣言します。このようなメソッドまたはサブプログラムは、SQLのCALL
文を使用して起動することもできます。コール仕様は、起動時に起動するJavaメソッドまたは共有ライブラリ内の名前付きプロシージャをデータベースに指示します。また、引数および戻り値に対して実行する型変換もデータベースに指示します。
ここでのトピック
前提条件
自分のスキーマ内にスタンドアロン・プロシージャを作成するか、または自分のスキーマ内のスタンドアロン・プロシージャを置き換えるには、CREATE
PROCEDURE
システム権限が必要です。別のユーザーのスキーマ内にスタンドアロン・プロシージャを作成するか、または別のユーザーのスキーマ内のスタンドアロン・プロシージャを置き換えるには、CREATE
ANY
PROCEDURE
システム権限が必要です。
コール仕様を起動するには、追加の権限が必要になる場合があります。たとえば、Cコール仕様の場合には、Cライブラリに対するEXECUTE
オブジェクト権限が必要です。
Oracleプリコンパイラ・プログラム内にCREATE
PROCEDURE
文を埋め込む場合、キーワードEND-EXEC
に続けて、各言語の埋込みSQL文の終了記号を記述して文を終了する必要があります。
構文
create_procedure ::=
plsql_procedure_source ::=
(sharing_clause ::=、default_collation_clause ::=、invoker_rights_clause ::=、accessible_by_clause ::=、call_spec ::=、body ::=、declare_section ::=、parameter_declaration ::=)
セマンティクス
create_procedure
OR REPLACE
プロシージャが存在する場合は、プロシージャを再作成し、再コンパイルします。
再定義する前のプロシージャに対する権限を付与されていたユーザーは、権限を再付与される必要なく、プロシージャにアクセスできます。
ファンクション索引がプロシージャに依存している場合、データベースによって索引にDISABLED
のマークが付けられます。
[ EDITIONABLE | NONEDITIONABLE ]
schema
でスキーマ・オブジェクト・タイプPROCEDURE
に対してエディションが有効になっている場合に、プロシージャがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE
。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。
plsql_procedure_source
schema
プロシージャが含まれているスキーマの名前。デフォルト: 自分のスキーマ。
procedure_name
作成するプロシージャの名前。
ノート:
SQL*Moduleによって生成されたスタブを使用してストアド・サブプログラムを起動する場合、ストアド・サブプログラム名は、起動側ホストの3GL言語(AdaやCなど)の有効な識別子である必要もあります。
body
プロシージャの必須の実行部、およびオプションでプロシージャの例外処理部。
declare_section
プロシージャのオプションの宣言部。宣言は、プロシージャに対してローカルであり、body
で参照でき、プロシージャが実行を完了すると消滅します。
例
例14-21 プロシージャの作成
この文は、スキーマhr
にプロシージャremove_emp
を作成します。
CREATE PROCEDURE remove_emp (employee_id NUMBER) AS
tot_emps NUMBER;
BEGIN
DELETE FROM employees
WHERE employees.employee_id = remove_emp.employee_id;
tot_emps := tot_emps - 1;
END;
/
remove_emp
プロシージャは、指定した従業員を削除します。このプロシージャを起動する場合は、削除する従業員のemployee_id
を指定する必要があります。
このプロシージャは、DELETE
文を使用して、employees
表からemployee_id
の行を削除します。
関連項目:
このプロシージャをパッケージに組み入れる方法は、「CREATE PACKAGE BODY文」を参照してください
例14-22 外部プロシージャの作成
次の例では、外部プロシージャc_find_root
はポインタをパラメータとして予測します。プロシージャfind_root
は、BY
REFERENCE
句を使用して、このパラメータを参照方式で渡します。
CREATE PROCEDURE find_root ( x IN REAL ) IS LANGUAGE C NAME c_find_root LIBRARY c_utils PARAMETERS ( x BY REFERENCE );
関連トピック
この章:
他の章:
その他のドキュメント:
-
CALL
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
コール仕様の詳細は、『Oracle Database開発ガイド』を参照してください。
-
ストアドPL/SQLサブプログラムの起動の詳細は、Oracle Database開発ガイド を参照してください