ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
ストアドプロシージャ(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から直接実行するには、こちらを参照。


スポンサード リンク


無名ブロック
ストアドプロシージャ(PROCEDURE)
ストアドファンクション(FUNCTION)
ストアドパッケージ(PACKAGE)
トリガー(TRIGGER)
PL/SQLのデータ型
PL/SQLの演算子(計算、代入、結合、連結、指数、比較)
PL/SQLの変数と定数
%TYPE属性と%ROWTYPE属性
PL/SQLの組み込み関数
PL/SQLの実行権限(AUTHID)
PL/SQLを独立したトランザクションで実行する

PL/SQL へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ