#はじめに
OracleのPL/SQLの復習のため、記事として残します。
#プロシージャ(PROCEDURE)
プロシージャとはOracleではPL/SQLと呼ばれているもので、事前にデータベースにコンパイルしておき、使用する時はそれを呼び出すだけという使い方をします。
プロシージャでは1つのSQL文では記述することができない複雑な処理を書くことができます。また、アプリケーションとデータベースの行き来する回数が少なくて済むため、ネットワークの負荷を少なくする、処理が高速になるというメリットがあります。
##プロシージャ 基本形
CREATE [OR REPLACE] PROCEDURE
ストアドプロシージャ名[(引数名 {IN | OUT | INOUT} データ型,...)]
IS
宣言部
BEGIN
処理部
EXCEPTION
例外処理部
END
;
##プロシージャ 例文
ログを出力する処理
CREATE PROCEDURE PLSQL_LOG(LOGMSG CHAR)
IS
FILE_HD UTL_FILE.FILE_TYPE;
BEGIN
FILE_HD:=UTL_FILE.FOPEN('D:\LOG\PLSQL','_'||USERENV('TERMINAL')||'_'||SYS_CONTEXT('USERENV','MODULE')||'_'||TO_CHAR(SYSDATE,'YYMMDD')||'.TXT','a');
UTL_FILE.PUT(FILE_HD,TO_CHAR(SYSDATE,'HH24:MI:SS')||','||LOGMSG);
UTL_FILE.FCLOSE(FILE_HD);
DBMS_OUTPUT.PUT_LINE(LOGMSG);
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ログ出力エラー:'||SQLERRM||'('||SQLCODE||')');
END;
#ファンクション(FUNCTION)
戻り値を返したい場合は、ファンクションで記述します。
##ファンクション 基本形
CREATE [OR REPLACE] FUNCTION ファンクション名(引数 IN データ型[, ...])
RETURN 戻り値の型
IS
宣言部
BEGIN
処理部
END
;
##ファンクション 例文
引数に渡した数値を2倍して返す処理
CREATE FUNCTION DOUBLE_NUMBER(IN_NUM IN NUMBER) RETURN NUMBER
IS
OUT_NUM NUMBER;
BEGIN
OUT_NUM := IN_NUM * 2;
RETURN OUT_NUM;
END;
#PL/SQL確認方法メモ
##shared_poolの確認方法
SELECT * FROM V$DB_OBJECT_CACHE;
##全てのオブジェクトを調べる
SELECT * FROM USER_OBJECTS;
##PL/SQLのエラーを調べる
SELECT * FROM USER_ERRORS;
##PL/SQLのソースを調べる
SELECT * FROM USER_SOURCE;