|
|
|
|
ストアドプロシージャ(PROCEDURE) |
|
スポンサード リンク
ストアドプロシージャの構文
CREATE OR REPLACE PROCEDURE プロシージャ名
[ (パラメータ変数1 [ IN | OUT | INT OUT ] データ型,
:
パラメータ変数n [ IN | OUT | INT OUT ] データ型) ] { AS | IS }
/* 宣言セクション */
BEGIN
/* 実行可能セクション */
EXCEPTION
/* 例外セクション */
END [ プロシージャ名 ];
|
無名ブロックとは異なり、DECLAREキーワードは無く、代わりに ISまたはASキーワードを使用します。
パラメータに指定するデータ型に、長さを指定することはできない。
例)
× param1 in char(2)
○ param1 in char
●パラメータのモード
IN
プロシージャ起動時に引数として受け取ったパラメータは読み込み専用となるのでプロシージャ内部で変更できない。
OUT
プロシージャ起動時に引数として受け取ったパラメータは全て無視される。
プロシージャ内部でセットされた値は、プロシージャ終了時に呼び出し元に戻り値として返される。
IN OUT
INとOUTを組み合わせたモード。
プロシージャ起動時に引数として渡され、この変数に設定された値は、プロシージャ終了時プロシージャ終了時に呼び出し元に戻り値として返される。
|
例1) 引数で指定した「v_dept_id」をキーに、表「dept」のカラム「dept_name」を取得し、「v_dept_name」を返却する。
|
create or replace procedure get_dept (
v_dept_id in char,
v_dept_name out varchar2) as
begin
select dept_name into v_dept_name from dept
where dept_id = v_dept_id;
end get_dept;
|
例2) 例1のストアドプロシージャを無名ブロックから実行する。
|
declare
disp_dept_name varchar2(10);
begin
get_dept(v_dept_id => 'D01',v_dept_name => disp_dept_name);
dbms_output.put_line(disp_dept_name);
end;
|
ストアドプロシージャをSQLPLUSから直接実行するには、こちらを参照。
スポンサード リンク
|
|
|
|
|