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

OracleのPL/SQLのサンプルです。

確認環境
・Oracle Express Edition 11g Release 2
・Windows 10

目次

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

前提

Oracle XE11をインストールし、SQLコマンドラインでPL/SQLを作成します。
OracleXE11のインストールとHRテーブルを確認

パッケージの概要

パッケージは、プロシージャやファンクションをまとめることができます。
仕様部と本体があり、仕様部には名称と引数など、本体には実処理を記述します。
1つのパッケージに複数のプロシージャとファンクションを記述できます。
https://docs.oracle.com/cd/E16338_01/appdev.112/b56260/packages.htm#i2404

 

仕様部を作成する

仕様部を作成するサンプルです。

CREATE OR REPLACE PACKAGE TEST100
IS
-- コメント
PROCEDURE TEST1;
PROCEDURE TEST2(
 id1    IN   number,
 name1  OUT  varchar2
);
END;
/

1行目は、TEST100というPACKAGEを作成しています。
4行目は、TEST1というプロシージャです。
5行目は、TEST2というプロシージャです。INとOUTがあります。

 

本体を作成する

本体の作成です。

CREATE OR REPLACE PACKAGE BODY TEST100
IS
-- コメント
   PROCEDURE test1
   IS
   BEGIN
       DBMS_OUTPUT.PUT_LINE('test1');
   END test1;
   PROCEDURE test2
   (id1   IN   number,
   name1  OUT  varchar2
   )
   IS
   BEGIN
      select name into name1 from SYAIN
      where ID = id1;
      dbms_output.put_line('名前は' || name1);
   END test2;
END TEST100;
/

パッケージ本体が作成されました。

1行目は、TEST100というPACKAGE BODYを作成しています。
4行目にtest1というプロシージャがあります。
9行目にtest2というプロシージャがあります。
ENDの数がわかりづらいので、ENDの後に始まりのプロシージャ名を入れると多少わかりやすくなります。

 

パッケージを実行する

パッケージ名.プロシージャ名+引数で実行できます。

set serveroutput on
variable name1 varchar2(20)

execute test100.test1
test1

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

execute test100.test2(1,:name1)
名前は鈴木

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

4,9行目でパッケージのプロシージャを実行しています。

 

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

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

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

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

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

 

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

ALL_OBJECTSテーブルで確認できます。

SELECT * FROM ALL_OBJECTS 
WHERE OBJECT_TYPE = 'PACKAGE' AND OWNER = 'HR';

SELECT * FROM ALL_OBJECTS 
WHERE OBJECT_TYPE = 'PACKAGE BODY' AND OWNER = 'HR';

上記は、HRスキーマのファンクションを確認しています。

 

パッケージを削除する

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

DROP PACKAGE BODY test100;

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

DROP PACKAGE test100;

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

SQL>

1行目は、パッケージ本体(ボディ)を削除しています。
5行目は、パッケージを削除しています。

関連の記事

OracleXE11のインストールとHRテーブルを確認
Oracle SQLコマンドラインを使用するサンプル

△上に戻る