目次
パッケージ | パッケージの概要 |
仕様部を作成する | |
本体を作成する | |
パッケージを実行する | |
エラー | 作成時にコンパイルエラーが発生したとき |
確認 | パッケージの存在確認を行う |
削除 | パッケージを削除する |
環境
実行は、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のストアドファンクションのサンプル