CREATE PROCEDURE

目的

プロシージャはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PROCEDURE文を使用すると、スタンドアロンのストアド・プロシージャまたはコール仕様を作成できます。

プロシージャとは、名前によってコールできるPL/SQL文の集合です。コール仕様は、SQLおよびPL/SQLからコールできるように、Javaメソッド、JavaScriptメソッドまたは第三世代言語(3GL)ルーチンを宣言します。コール仕様は、コールされたときに起動するJavaメソッド、JavaScriptファンクションまたは第3世代言語(3GL)ルーチンをOracle Databaseに指示します。また、引数および戻り値に対して実行する型変換もデータベースに指示します。

ストアド・プロシージャには、開発、整合性、セキュリティ、パフォーマンスおよびメモリー割当ての面でいくつかのメリットがあります。

関連項目:

  • JavaScript開発者ガイド

  • CREATE MLE MODULE

  • CREATE MLE ENV

  • ストアド・プロシージャのコール方法など、ストアド・プロシージャの詳細および外部プロシージャの登録については、『Oracle Database開発ガイド』を参照してください。

  • プロシージャと類似点が多いファンクションの詳細は、「CREATE FUNCTION」を参照してください。

  • パッケージの作成の詳細は、「CREATE PACKAGE」を参照してください。CREATE PROCEDURE文では、スタンドアロンのスキーマ・オブジェクトとしてプロシージャが作成されます。また、プロシージャをパッケージの一部としても作成できます。

  • スタンドアロン・プロシージャの変更および削除については、「ALTER PROCEDURE」および「DROP PROCEDURE」を参照してください。

  • 共有ライブラリについては、「CREATE LIBRARY」を参照してください。

前提条件

自分のスキーマ内にプロシージャを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にプロシージャを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。

コール仕様を起動する場合、その他の権限が必要になることがあります。たとえば、Cコール仕様には、Cライブラリに対するEXECUTEオブジェクト権限が必要です。

Oracleプリコンパイラ・プログラム内にCREATE PROCEDURE文を埋め込む場合、キーワードEND-EXECに続けて、各言語の埋込みSQL文の終了記号を記述して文を終了する必要があります。

関連項目:

詳細は、『Oracle Database PL/SQL言語リファレンス』または『Oracle Database Java開発者ガイド』を参照してください。

構文

プロシージャはPL/SQLを使用して定義されます。あるいは、コール仕様を使用してJava、JavaScript、CなどのPL/SQL以外のコードを参照することもできます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_procedure::=

(plsql_procedure_source: 『Oracle Database PL/SQL言語リファレンス』を参照。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のプロシージャを再作成できます。この句を指定した場合、プロシージャに付与されているオブジェクト権限を削除、再作成および再付与しなくても、既存のプロシージャの定義を変更できます。プロシージャを再定義した場合、そのプロシージャは自動的に再コンパイルされます。

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

ファンクション索引がプロシージャに依存している場合、索引にDISABLEDのマークが付きます。

関連項目:

プロシージャの再コンパイルについては、「ALTER PROCEDURE」を参照してください。

IF NOT EXISTS

IF NOT EXISTSを指定すると、次の効果が得られます。

  • プロシージャが存在していない場合は、文の最後に新しいプロシージャが作成されます。

  • プロシージャが存在している場合、これは文の最後の時点にあるプロシージャになります。古いものが検出されるため、新しいものは作成されません。

単一の文には、一度に1つOR REPLACEまたはIF NOT EXISTSを指定できます。同じ文でOR REPLACEIF NOT EXISTSの両方を使用すると、ORA-11541: REPLACE and IF NOT EXISTS cannot coexist in the same DDL statementというエラーが発生します。

IF EXISTSCREATEとともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statementが発生します。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプPROCEDUREのエディショニングが有効化されたときに、そのプロシージャをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_procedure_source

plsql_procedure_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。