PLはパッケージの削除操作をサポートしており、パッケージの情報を確認して管理することができます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
プログラムパッケージの削除
不要なプログラムパッケージを削除するには、DROP PACKAGE コマンドを使用します。構文は以下のとおりです:
DROP PACKAGE [BODY] [user.]package_name;
例:
obclient>DROP PACKAGE obdemo_pack1;
Query OK, 0 rows affected
マネージャーパッケージ
以下のパッケージ関連ビューを使用して、パッケージの情報を確認できます:
USER_OBJECTS:データベースオブジェクトを表示し、パッケージの名前、現在の状態、作成時間などの情報を一覧表示するために使用できます。注意
パッケージ(
PACKAGE)とパッケージ本体(PACKAGE BODY)は、異なるタイプのオブジェクトです。USER_SOURCE:パッケージとパッケージ本体の内容を表示します。USER_ERRORS:前回パッケージまたはパッケージ本体をコンパイルした際のエラーメッセージを表示します。
例1:現在のユーザーのすべてのパッケージのステータスと作成時間を表示します。
obclient> SELECT OBJECT_NAME,OBJECT_TYPE,CREATED,STATUS
FROM USER_OBJECTS WHERE OBJECT_TYPE LIKE 'PACKAGE%';
+-------------+-------------+-----------+---------+
| OBJECT_NAME | OBJECT_TYPE | CREATED | STATUS |
+-------------+-------------+-----------+---------+
| DEMO_PACK | PACKAGE | 17-DEC-20 | INVALID |
+-------------+-------------+-----------+---------+
1 row in set
例2: OBDEMO_PACK という名前のパッケージ本体の内容を表示します。
obclient> SELECT TEXT FROM USER_SOURCE
WHERE TYPE='PACKAGE BODY'
AND NAME='OBDEMO_PACK'\G
*************************** 1. row ***************************
TEXT: PACKAGE BODY obdemo_pack
IS
FUNCTION add_obdept(dept_no NUMBER, dept_name VARCHAR2, location VARCHAR2)
RETURN NUMBER
IS
deptno_remaining EXCEPTION;
PRAGMA EXCEPTION_INIT(deptno_remaining, -1);
BEGIN
INSERT INTO obdept VALUES(dept_no, dept_name, location);
IF SQL%FOUND THEN
RETURN 1;
END IF;
EXCEPTION
WHEN deptno_remaining THEN
RETURN 0;
WHEN OTHERS THEN
RETURN -1;
END add_obdept;
FUNCTION remove_obdept(dept_no NUMBER)
RETURN NUMBER
IS
BEGIN
DELETE FROM obdept WHERE deptno=dept_no;
IF SQL%FOUND THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN -1;
END remove_obdept;
PROCEDURE query_obdept (dept_no IN NUMBER)
IS
BEGIN
SELECT * INTO obDeptRec FROM obdept WHERE deptno=dept_no;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('データベースには、'||dept_no||'としてエンコードされた部門がありません');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('プログラム実行エラー!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'----'||SQLERRM);
END query_obdept;
BEGIN
Null;
END obdemo_pack
1 row in set
例3:パッケージ PKG の前回のコンパイル時のエラー情報と位置を表示します。
obclient> CREATE OR REPLACE PACKAGE pkg IS v vvv;
END;
/
Query OK, 0 rows affected, 1 warning
obclient> SELECT LINE,POSITION,TEXT FROM USER_ERRORS
WHERE NAME='PKG' AND TYPE='PACKAGE';
+------+----------+------------------------------------------------------------------------+
| LINE | POSITION | TEXT |
+------+----------+------------------------------------------------------------------------+
| 0 | 34 | OBE-00600: internal error code, arguments: -5544, Undeclared type: VVV |
+------+----------+------------------------------------------------------------------------+