CREATE
PROCEDURE
文は、スタンドアロン・プロシージャまたはコール仕様を作成するか、または置き換えます。
スタンドアロン・プロシージャとは、データベースに格納されるプロシージャ(特定のアクションを実行するサブプログラム)です。
注意: CREATE PROCEDURE 文で作成するスタンドアロン・プロシージャは、PL/SQLブロックまたはパッケージで宣言および定義するプロシージャとは異なります。後者の詳細は、「プロシージャの宣言および定義」を参照してください。 |
コール仕様は、PL/SQLからコールできるようにJavaメソッドまたは第三世代言語(3GL)サブプログラムを宣言します。このようなメソッドまたはサブプログラムは、SQLのCALL
文を使用して起動することもできます。コール仕様は、起動時に起動するJavaメソッドまたは共有ライブラリ内の名前付きプロシージャをデータベースに指示します。また、引数および戻り値に対して実行する型変換もデータベースに指示します。
ここでのトピック
前提条件
自分のスキーマ内にスタンドアロン・プロシージャを作成するか、または自分のスキーマ内のスタンドアロン・プロシージャを置き換えるには、CREATE
PROCEDURE
システム権限が必要です。別のユーザーのスキーマ内にスタンドアロン・プロシージャを作成するか、または別のユーザーのスキーマ内のスタンドアロン・プロシージャを置き換えるには、CREATE
ANY
PROCEDURE
システム権限が必要です。
コール仕様を起動するには、追加の権限が必要になる場合があります。たとえば、Cコール仕様の場合には、Cライブラリに対するEXECUTE
オブジェクト権限が必要です。
CREATE
PROCEDURE
文をOracleプリコンパイラ・プログラム内に埋め込むには、キーワードEND-EXEC
の後に特定の言語の埋込みSQL文の終了記号を付けて文を終了する必要があります。
関連項目: 前述の前提条件の詳細は、次のマニュアルを参照してください。
|
構文
create_procedure ::=
参照:
invoker_rights_clause ::=
セマンティクス
OR REPLACE
プロシージャが存在する場合は、プロシージャを再作成し、再コンパイルします。
再定義する前のプロシージャに対する権限を付与されていたユーザーは、権限を再付与される必要なく、プロシージャにアクセスできます。
ファンクション索引がプロシージャに依存している場合、データベースによって索引にDISABLED
のマークが付けられます。
schema
プロシージャが含まれているスキーマの名前。デフォルト: 自分のスキーマ。
procedure_name
作成するプロシージャの名前。
注意: SQL*Moduleによって生成されたスタブを使用してストアド・サブプログラムを起動する場合、ストアド・サブプログラム名は、起動側ホストの3GL言語(AdaやCなど)の有効な識別子である必要もあります。 |
invoker_rights_clause
プロシージャのAUTHID
プロパティを指定します。AUTHID
プロパティの詳細は、「実行者権限および定義者権限(AUTHIDプロパティ)」を参照してください。
body
プロシージャの必須の実行部、およびオプションでプロシージャの例外処理部。
declare_section
プロシージャのオプションの宣言部。宣言は、プロシージャに対してローカルであり、body
で参照でき、プロシージャが実行を完了すると消滅します。
call_spec、EXTERNAL
詳細は、「call_spec」および「EXTERNAL」を参照してください。
例
プロシージャの作成: 例 次の文は、プロシージャremove_emp
をスキーマhr
に作成します。
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
の行を削除します。
次の例では、外部プロシージャ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 );