CREATE PROCEDURE

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

同じ名前のパッケージがすでにある場合は、パッケージを置き換える。OR REPLACEを指定しない場合は、同じ名前のパッケージがすでにあるとエラーになる。

schema

プロシージャを作成するスキーマを指定する。他ユーザのスキーマ内にプロシージャを作成する場合は、CREATE ANY PROCEDUREシステム権限が必要である。他ユーザのスキーマ内のプロシージャを置換する場合は、ALTER ANY PROCEDUREシステム権限が必要である。

スキーマの指定を省略した場合は、自分のスキーマに作成される。自分のスキーマ内にプロシージャを作成する場合は、CREATE PROCEDUREシステム権限が必要である。

procedure

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

param

プロシージャの引数を指定する。

auth

パッケージを実行する際の権限を指定する。権限の指定を省略した場合は、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]
name

引数の名前を指定する。

NOCOPY

パラメータを参照渡しにする。

datatype

引数のデータ型を指定する。

expr

引数の初期値を指定する。

権限

CREATE PROCEDURE文を実行するには、ユーザまたはユーザに付与されたロールに、次の権限が必要である。

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>

関連SQL