我寫在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