私はいくつかの情報をデバッグするために私が書いた以下のコードを持っています
ユーザーセッションごとに1回だけ呼び出す必要があるGLOBAL.INITを呼び出したい
したがって、PLSQLテーブルを使用して値をキャッシュしました。SIDが異なる場合は、もう一度GLOBAL.INITを呼び出しますが、キャッシュが機能していません。親切に助けてください。
create or replace procedure dbg(message in VARCHAR2) is
sid1 NUMBER;
idx NUMBER;
Type sidcache is table of NUMBER index by binary_integer;
sidcache1 sidcache;
sid2 NUMBER;
begin
select sid
into sid1
FROM v$session se
where se.audsid = SYS_CONTEXT('userenv', 'sessionid');
BEGIN
sid2 := sidcache1(sid1);
EXCEPTION
WHEN no_data_found THEN
sidcache1(sid1) := sid1;
global.INIT('100', 'SYSTEM');
dbms_output.put_line(1);
WHEN OTHERS THEN
dbms_output.put_line(sqlerrm);
END;
WRITE_DEBUG.pr_debug('LD', message);
end dbg;
編集#1:-
マイクの答えを試した後、同じ要件が以下を使用して達成されました
create or replace procedure dbg(message in VARCHAR2) is
sid2 NUMBER;
BEGIN
sid2 := WRITE_DEBUG.sidcache1(1);
EXCEPTION
WHEN no_data_found THEN
WRITE_DEBUG.sidcache1(1) := 1;
global.INIT('100', 'DEBUG');
WHEN OTHERS THEN
dbms_output.put_line(sqlerrm);
END;
WRITE_DEBUG.pr_debug('LD', message);
end dbg;