Oracle PL/SQLのパッケージのサンプル

目次

パッケージ パッケージの概要
  仕様部を作成する
  本体を作成する
  パッケージを実行する
エラー 作成時にコンパイルエラーが発生したとき
確認 パッケージの存在確認を行う
削除 パッケージを削除する

環境

実行は、SQL PlusとSQL Developerで確認しています。

 

パッケージの概要

パッケージは、仕様部と本体があります。

仕様部はパブリックの項目を宣言します。パッケージの外から参照できます。

本体には処理を記述します。
1つのパッケージに複数のプロシージャとファンクションを記述できます。
https://docs.oracle.com/cd/E16338_01/appdev.112/b56260/packages.htm#i2404

 

仕様部を作成する

CREATE OR REPLACE PACKAGE PACK1
IS
-- プロシージャ
PROCEDURE PRO1(
	id1    IN   number,
	name1  OUT  varchar2
);
-- ファンクション
FUNCTION FUN1(
	id1  IN  varchar2
)RETURN VARCHAR2;
END;

1行目は、PACK1というPACKAGEを作成しています。
4行目は、PRO1というプロシージャです。INとOUTがあります。
9行目は、FUN1というファンクションです。INがあります。

 

本体を作成する

本体の作成です。

CREATE OR REPLACE PACKAGE BODY PACK1
IS
	-- プロシージャ
	PROCEDURE PRO1
	(id1   IN   number,
	name1  OUT  varchar2
	)
	IS
	BEGIN
		select name into name1 from employee
		where ID = id1;
		dbms_output.put_line('my name is ' || name1);
	END PRO1;
	-- ファンクション   
	FUNCTION FUN1(id1 IN varchar2) RETURN varchar2
	IS
	name1 VARCHAR2(20);
	BEGIN
		SELECT name INTO name1 FROM employee
		WHERE ID = id1;
		RETURN name1;
	END FUN1;
END PACK1;

1行目は、PACK1というPACKAGE BODYを作成しています。
4行目にPRO1というプロシージャがあります。
15行目にFUN1というファンクションがあります。
13,22,23行目のようにENDの後に始まりのプロシージャ名、ファンクション名、パッケージ名を入れると対応の箇所がわかりやすくなります。

 

パッケージを実行する

SQLコマンドラインで、パッケージのプロシージャとファンクションを実行します。

SQL> set serveroutput on
SQL> variable name1 varchar2(20)
SQL> execute PACK1.PRO1(1,:name1)
my name is 鈴木

PL/SQLプロシージャが正常に完了しました。

SQL> select PACK1.FUN1(1) from dual;

PACK1.FUN1(1)
--------------------------------------------------------------------------------
鈴木

SQL>

3行目は、パッケージのプロシージャを実行しています。
8行目は、パッケージのファンクションを実行しています。

 

作成時にコンパイルエラーが発生したとき

パッケージ作成時にコンパイルエラーが発生したときはshow errorと入力するとエラー内容が表示されます。

警告: ファンクションが作成されましたが、コンパイル・エラーがあります。

SQL> show error
FUNCTION TEST2のエラーです。

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
3/8      PLS-00201: 識別子Aを宣言してください。
SQL>

 

パッケージの存在確認を行う

現ユーザがアクセスできるパッケージを確認できます

SELECT * FROM ALL_PROCEDURES
where OBJECT_TYPE = 'PACKAGE' and OWNER = 'SYSTEM'

上記は、systemスキーマのパッケージを確認しています。

 

現ユーザが所有するパッケージを確認できます

SELECT * FROM USER_PROCEDURES

 

パッケージを削除する

パッケージとパッケージ本体(ボディ)の削除の方法です。

DROP PACKAGE BODY PACK1;

パッケージ本体が削除されました。

DROP PACKAGE PACK1;

パッケージが削除されました。

SQL>

本体(ボディ)を削除する場合は、1行目のように行います。
仕様と本体の両方を削除する場合は、5行目のように行います。

以下は、OracleのDROP PACKAGEのリンクです。
https://docs.oracle.com/cd/E16662_01/doc/timesten.1121/b56051/ttsql313.htm

関連の記事

Oracle PL/SQLのストアドプロシージャのサンプル
Oracle PL/SQLのストアドファンクションのサンプル

△上に戻る