プロシージャ作成
プロシージャとはORACLEではPL/SQLと呼ばれているもので、事前にSQL文をデータベースにコンパイルして置いておき、使用するときはそれを呼び出すだけという使い方をします。
利点として、
1つのSQL文では記述することができない複雑な処理を書くことができます。また、ネットワークの負荷を少なくする、処理が早いといったメリットがあります。
プロシージャの作成プロシージャの作成構文
CREATE PROCEDURE構文
CREATE [OR REPLACE] PROCEDURE
ストアドプロシージャ名[(引数名 {IN | OUT | INOUT} データ型,...)]
IS
宣言部
BEGIN
処理部
EXCEPTION
例外処理部
END
;
OR REPLACE・・・ 同名のプロシージャがあった場合は上書きする
引数名 ・・・引数名を指定する
IN ・・・値を受け取るだけの変数。プロシージャに値を渡す時に使います。
OUT ・・・値を返すだけの変数。呼び出し元で変数をセットすると、
プロシージャ実行後にセットした変数に値が入ります。
INOUT ・・・受け取った値を書き換えて返す変数。プロシージャに値を渡す
とともに、値を受け取りたい時に使います。
データ型 ・・・引数のデータ型を指定する
IS
宣言部 ・・・プロシージャ内部で使用する変数を宣言する
BEGIN ・・・処理部 プロシージャに行わせるメイン処理を記述する
EXCEPTION ・・・例外処理部 メイン処理で起きた例外の処理をする
(例)CREATE PROCEDURE文の例
CREATE PROCEDURE hoge(aa IN NUMBER, bb OUT VARCHAR2(2))
IS
CURSOR c_hoge1 IS SELECT * FROM pref_master WHERE pref_code = aa;
BEGIN
DBMS_OUTPUT.PUT_LINE(‘start…’);
FOR rec IN c_hoge1 LOOP
DBMS_OUTPUT.PUT_LINE(rec.pref_code || ‘-’ || rec.pref_name);
END LOOP;
DBMS_OUTPUT.PUT_LINE(‘…end’);
bb := ‘OK’;
EXCEPTION
WHEN others THEN
DBMS_OUTPUT.PUT_LINE(‘..error..’);
bb := ‘NG’;
END;
/
この例ではカーソルを使って、指定された条件で検索を行い、取得できた件数分ループさせて値を表示するというプロシージャです。
「DBMS_OUTPUT」はOracleに標準装備されているユーティリティパッケージです。
CREATE文を流して見たが、
「プロシージャが作成されました」が表示されれば、成功。
「警告: プロシージャが作成されましたが、コンパイル・エラーがあります」が
表示されていたら、どこかに文法エラーがあるはず。そのときは、
show errors とすれば、エラーの個所が表示されます。
続きを読む