保存されていない 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>とを実際的值に置き換える必要があります。
お役に立てたなら幸いです!