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 ::=

セマンティクス

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 );

関連トピック

この章:

他の章:

その他のドキュメント: