2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Oracle PL/SQL プロシージャとファンクション

Last updated at Posted at 2020-06-05

#はじめに
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;
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?