PL/SQLストアドプロシージャ
Oracleに格納されたPL/SQLブロック(プログラム)のことを、ストアド・サブプログラムといいます。ストアド・プログラムを使用することで、アプリケーション(Sql*Plus、JAVAプログラムなど)からPL/SQLプログラムを送信せずに、格納されているプログラムを呼び出すだけで良いため、様々な利点があります。
◆ストアド・プログラムの特徴
1.共有利用による生産性の向上
⇒これは複数のアプリケーションからOracleに格納されているプログラムを共有利用することにより生産性が向上します。
2.パフォーマンスの向上
⇒コンパイル済みのプログラムが格納されるため、実行時にコンパイルの必要がなくパフォーマンスが向上します。
3.ネットワーク帯域の節約
⇒プログラムを送信せずに、Oracle内部に格納されてるプログラムを実行するという命令だけ送信するため、ネットワーク上に流れるトラフィックが少なくて済みます。
|
ストアド・サブプログラムには、ストアドプロシージャとストアドファンクションがあります。それぞれ以下のような特徴があります。
●ストアドプロシージャ ⇒ 特定の処理を実行するためのプログラム。
●ストアドファンクション ⇒ 処理の後、結果を一つ返すプログラム。
本項では、PL/SQLストアドプロシージャについて解説します。プロシージャは、仕様部と本体の2部構成されます。仕様部にはプロシージャの呼び出しに必要な情報を記述し、本体には処理内容を記述します。
◆ストアドプロシージャの書式
CREATE [ OR REPLACE ] PROCEDURE <プロシージャ名> [ <パラメータ名> <データ型>
]
{ IS | AS }
<宣言部>
BEGIN
<実行部>
EXCEPTION
<例外処理部>
END;
※仕様部が最初の1行、2行目以降が本体となります。
※<プロシージャ名>は、PROCEDUREキーワードの後に任意の名前を指定します。
※[ OR REPLACE ]は、同名のプロシージャが既に作成されている場合、上書きして作成します。
※[ <パラメータ名> <データ型> ]は、プロシージャに渡すパラメータを指定します。
※プロシージャの本体もPL/SQLブロックと同様、宣言部・実行部・例外処理部で構成されます。
※宣言部は、DECLAREでなくISまたはASで開始する。
※宣言部は不要でもISまたはASは省略できない。ISとASには違いはない。
|
以下にストアドプロシージャの作成例を示します。
SQL> CREATE OR REPLACE PROCEDURE procedure_sample
2 IS
3 CURSOR tcur IS SELECT username,account_status from dba_users;
4 BEGIN
5 FOR t2cur IN tcur LOOP
6 DBMS_OUTPUT.PUT_LINE(t2cur.username || ' ' || t2cur.account_status);
7 END LOOP;
8 END;
9 /
プロシージャが作成されました。
SQL>
|
※コンパイル時がエラーもしくは警告が発生した場合の、対処方法は「PL/SQLコンパイルエラー確認方法」で解説しています。
以下にストアドプロシージャ作成後の確認方法を示します。
SQL> SET PAGES 1000
SQL> COLUMN object_name FORMAT a30;
SQL> COLUMN object_type FORMAT a30;
SQL> SELECT object_name,object_type,status FROM user_objects WHERE object_name='PROCEDURE_SAMPLE';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------------------ --------------
PROCEDURE_SAMPLE PROCEDURE VALID
SQL>
|
以下にストアドプロシージャの実行例を示します。
SQL> SET SERVEROUTPUT ON
SQL> EXECUTE procedure_sample;
SYSTEM OPEN
SYS OPEN
ANONYMOUS OPEN
APEX_PUBLIC_USER LOCKED
APEX_040000 LOCKED
FLOWS_FILES LOCKED
OUTLN EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
XDB EXPIRED & LOCKED
CTXSYS EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
HR EXPIRED & LOCKED
PL/SQLプロシージャが正常に完了しました。
SQL>
|
※上記はsql*plusからプロシージャを実行する方法です。他のプロシージャから作成したプロシージャを実行するには、直接プロシージャ名を指定して実行します。
|
スポンサードリンク
|