CREATE PROCEDUREは、ストアドプロシージャを作成するSQL文である。パッケージに含まれるプロシージャと区別するために、スタンドアロン・プロシージャとも呼ばれる。
CREATE [OR REPLACE] PROCEDURE [schema.]procedure [(param [,param...])] [auth] {IS|AS}
[PRAGMA AUTONOMOUS_TRANSACTION;]
[local_declarations]
BEGIN
executable_statements
[EXCEPTION
exception_handlers]
END [function_name];
同じ名前のパッケージがすでにある場合は、パッケージを置き換える。OR REPLACEを指定しない場合は、同じ名前のパッケージがすでにあるとエラーになる。
プロシージャを作成するスキーマを指定する。他ユーザのスキーマ内にプロシージャを作成する場合は、CREATE ANY PROCEDUREシステム権限が必要である。他ユーザのスキーマ内のプロシージャを置換する場合は、ALTER ANY PROCEDUREシステム権限が必要である。
スキーマの指定を省略した場合は、自分のスキーマに作成される。自分のスキーマ内にプロシージャを作成する場合は、CREATE PROCEDUREシステム権限が必要である。
作成するプロシージャの名前を指定する。
プロシージャの引数を指定する。
パッケージを実行する際の権限を指定する。権限の指定を省略した場合は、AUTHID DEFINERでストアドパッケージが作成される。
権限 | 説明 |
---|---|
AUTHID CURRENT_USER | 実行者権限パッケージを作成する。
パッケージは実行するユーザーの権限を持つ。 スキーマ・オブジェクトへの未修飾の参照を実行者のスキーマで解決する。 |
AUTHID DEFINER | 定義者権限パッケージを作成する。
パッケージが存在するスキーマの所有者の権限で実行される。 スキーマ・オブジェクトへの未修飾の参照を所有者のスキーマで解決する。 |
ストアド・プロシージャやストアド・ファンクションを作成するときにコンパイル・エラーがあった場合でも、その詳細は表示されない。コンパイル・エラーの詳細を表示するようにするには、 SHOW ERRORS コマンドを実行する。
入力パラメータ
name IN type [DEFAULT expr]
出力パラメータ
name OUT [NOCOPY] type [DEFAULT expr]
入出力パラメータ
name IN OUT [NOCOPY] type [DEFAULT expr]
引数の名前を指定する。
パラメータを参照渡しにする。
引数のデータ型を指定する。
引数の初期値を指定する。
CREATE PROCEDURE文を実行するには、ユーザまたはユーザに付与されたロールに、次の権限が必要である。
権限 | 説明 |
---|---|
CREATE PRODECURE | 自分のスキーマにプロシージャを作成できる。 |
CREATE ANY PRODECURE | 任意のスキーマにプロシージャを作成できる。 |
SQL> CREATE PROCEDURE proc_quotes
2 (p_code IN quotes.code%TYPE, p_name OUT quotes.name%TYPE) IS
3 BEGIN
4 SELECT name INTO p_name FROM quotes WHERE code = p_code;
5 END;
6 /
プロシージャが作成されました。
SQL>
SQL> CREATE OR REPLACE PROCEDURE proc1 (p_empno IN NUMBER)
2 IS
3 v_ename emp.ename%TYPE;
4 BEGIN
5 SELECT ename INTO v_ename FROM emp WHERE empno = p_empno;
6 DBMS_OUTPUT.PUT_LINE(v_ename);
7 END;
8 /
プロシージャが作成されました。
SQL>