VALIDATE ストアドプロシージャは、オブジェクトIDに基づいてデータベースオブジェクトを検証し、再コンパイルするために使用されます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity Editionは現在サポートされていません。
構文
DBMS_UTILITY.VALIDATE (
OBJECT_ID NUMBER,
IS_RECOMPILE BOOLEAN DEFAULT FALSE);
パラメータ説明
パラメータ |
説明 |
|---|---|
| OBJECT_ID | 検証するデータベースオブジェクトのオブジェクトID。 |
| IS_RECOMPILE | 組み込みパラメータ。デフォルト値は FALSE です。 |
使用方法
VALIDATEストアドプロシージャは、まずOBJECT_IDに基づいてsys.all_objectsビューからオブジェクトの所有者、名前、タイプを取得し、その後そのオブジェクトに対して検証と再コンパイルを実行します。VALIDATEの実行が完了した後、コンパイルが成功した場合、コンパイル結果はPLキャッシュおよびディスクキャッシュに書き込まれ、PLオブジェクトのウォームアップに利用できます。- サポートされているオブジェクトタイプは
PROCEDURE、FUNCTION、TRIGGER、PACKAGE、PACKAGE BODY、TYPEです。 - 指定された
OBJECT_IDがsys.all_objectsに存在しない場合、ストアドプロシージャはエラーを報告せず、サイレントで戻ります。 - このサブルーチンは呼び出し元の権限(Invoker's Rights)を使用し、通常のユーザーが他のスキーマ下のオブジェクトをコンパイルできるようにします。
VALIDATEはSQLの予約語であるため、CALL DBMS_UTILITY.VALIDATE(...)構文での呼び出しはサポートされていません。PL/SQL匿名ブロック内で呼び出す必要があります。
例
ストアドプロシージャ MY_PROC を作成します。
obclient> CREATE OR REPLACE PROCEDURE MY_PROC IS
BEGIN
NULL;
END;
/
MY_PROC のオブジェクト情報を照会し、その OBJECT_ID を取得します。
obclient> SELECT OBJECT_ID, OBJECT_NAME, OBJECT_TYPE, STATUS FROM SYS.ALL_OBJECTS
WHERE OBJECT_NAME = 'MY_PROC';
結果は次のとおりです:
+-----------+-------------+-------------+--------+
| OBJECT_ID | OBJECT_NAME | OBJECT_TYPE | STATUS |
+-----------+-------------+-------------+--------+
| 500002 | MY_PROC | PROCEDURE | VALID |
+-----------+-------------+-------------+--------+
1 row in set
PL/SQLの匿名ブロック内でVALIDATEストアドプロシージャを呼び出します。
obclient> DECLARE
obj_id NUMBER;
BEGIN
SELECT OBJECT_ID INTO obj_id FROM SYS.ALL_OBJECTS
WHERE OBJECT_NAME = 'MY_PROC';
DBMS_UTILITY.VALIDATE(obj_id);
END;
/
再度MY_PROCのステータスを照会します。
obclient> SELECT OBJECT_ID, OBJECT_NAME, OBJECT_TYPE, STATUS FROM SYS.ALL_OBJECTS
WHERE OBJECT_NAME = 'MY_PROC';
結果は次のとおりです:
+-----------+-------------+-------------+--------+
| OBJECT_ID | OBJECT_NAME | OBJECT_TYPE | STATUS |
+-----------+-------------+-------------+--------+
| 500002 | MY_PROC | PROCEDURE | VALID |
+-----------+-------------+-------------+--------+
1 row in set