保存されていない SQL を PL/SQL で復元する

PL/SQLで保存されていないSQLを取得する場合、DBMS_UTILITY.GET_PARAMETER_VALUE関数を使用します。

以下に例を示します。

DECLARE
v_sql_text CLOB;
BEGIN
v_sql_text := DBMS_UTILITY.GET_PARAMETER_VALUE('cursor_sharing');
DBMS_OUTPUT.PUT_LINE('未保存的SQL: ' || v_sql_text);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('无法获取未保存的SQL');
END;

上記で、非永続SQLを含んだ“cursor_sharing“というパラメータの値を取得するため、“DBMS_UTILITY.GET_PARAMETER_VALUE“関数を使用し、正常に取得されれば値を出力、取得に失敗すればエラーメッセージを出力しています。

保存されていないSQLは、現在のセッションでは取得できますが、他のセッションで取得したい場合は、V$OPEN_CURSORビューから照会できます。

SELECT a.sql_text
FROM v$open_cursor a
WHERE a.sid = <会话ID>
AND a.sql_id = '<SQL_ID>';

上掲の例では、V$OPEN_CURSORビューを活用し、特定のセッションIDとSQL IDに紐付くフェッチ済でないSQLテキストを取得します。この際、<セッションID>とを実際的值に置き換える必要があります。

お役に立てたなら幸いです!

bannerAds