我写在Oracle 10g中一个记录的过程,它写入一个表具有以下插入调用包/程序:获取甲骨文
INSERT INTO EXEC_LOG VALUES (
(SELECT SYS_CONTEXT('USERENV','SESSIONID') sessionid FROM dual),
strPackage, strProcedure, strEventType, strEventLevel, SYSDATE, strMessage
);
此过程在多个不同的软件包/程序重复使用,但现在,程序员必须将他们的程序包/程序名称传递给日志记录程序(strPackage
和strProcedure
)。
我想知道是否有一个v $视图或Oracle中的哪些东西可以告诉我该程序是从哪个包中调用的,因此不需要程序员通过strPackage
和strProcedure
。
例:
如果我调用这两个过程:
BEGIN
log_test.testproc1;
log_test.testproc2;
END;
从这个包:
CREATE OR REPLACE PACKAGE BODY log_test IS
PROCEDURE TestProc1 IS
BEGIN
write_exec_log(...);
END TestProc1;
PROCEDURE TestProc2 IS
BEGIN
write_exec_log(...);
END TestProc2;
END log_test;
我会希望能够评估log_test
/TestProc1
和log_test
/TestProc2
从insdie write_exec_log
方法。
这将让我的包名称,而不是程序名称。我为这个问题增加了一个例子。调用堆栈包含'log_test',但不包含'TestProc1'。 – Paul 2012-04-19 15:40:59
您可以从包中获取行号。这足够接近了吗? – 2012-04-19 15:49:49
并不是真的,我也想用它来表现指标,所以我想知道当调用write_exec_log时什么程序正在运行。 – Paul 2012-04-19 15:57:01