プライマリ・コンテンツに移動
Oracle Database PL/SQL言語リファレンス
12c リリース1 (12.1)
B71296-06
目次へ移動
目次
索引へ移動
索引

前
次

CREATE PROCEDURE文

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文の終了記号を付けて文を終了する必要があります。

関連項目:

前述の前提条件の詳細は、次のマニュアルを参照してください。

  • Oracle Database開発ガイド

  • 『Oracle Database Java開発者ガイド』

構文

invoker_rights_clause ::=

セマンティクス

OR REPLACE

プロシージャが存在する場合は、プロシージャを再作成し、再コンパイルします。

再定義する前のプロシージャに対する権限を付与されていたユーザーは、権限を再付与される必要なく、プロシージャにアクセスできます。

ファンクション索引がプロシージャに依存している場合、データベースによって索引にDISABLEDのマークが付けられます。

[ EDITIONABLE | NONEDITIONABLE ]

schemaでスキーマ・オブジェクト・タイプPROCEDUREに対してエディションが有効になっている場合に、プロシージャがエディション・オブジェクトまたは非エディション・オブジェクトのどちらになるかを指定します。デフォルト: EDITIONABLE。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

schema

プロシージャが含まれているスキーマの名前。デフォルト: 自分のスキーマ。

procedure_name

作成するプロシージャの名前。

注意:

SQL*Moduleによって生成されたスタブを使用してストアド・サブプログラムを起動する場合、ストアド・サブプログラム名は、起動側ホストの3GL言語(AdaやCなど)の有効な識別子である必要もあります。

invoker_rights_clause

プロシージャのAUTHIDプロパティを指定します。AUTHIDプロパティの詳細は、「実行者権限および定義者権限(AUTHIDプロパティ)」を参照してください。

accessible_by_clause

プロシージャに対する動作は、ファンクションに対する動作と同様です。CREATE FUNCTIONaccessible_by_clauseを参照してください。

body

プロシージャの必須の実行部、およびオプションでプロシージャの例外処理部。

declare_section

プロシージャのオプションの宣言部。宣言は、プロシージャに対してローカルであり、bodyで参照でき、プロシージャが実行を完了すると消滅します。

call_spec、EXTERNAL

「call_spec」および「EXTERNAL」を参照してください。

プロシージャの作成: 例

この文は、スキーマ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.htm#GUID-68526FF2-96A1-4F14-A10B-4DD3E1CD80BE__I2098638」を参照してください

次の例では、外部プロシージャ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開発ガイド』を参照してください。