我有以下代码,我编写了这些代码来调试一些信息
我想调用 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;