我們最近將從Oracle帳戶開發的一個數據庫更改爲LDAP登錄帳戶,並且對於訪問系統的員工使用的前端進行了很好的改進。但是,我們有第二種限制管理人員進入數據庫的方法,並且使用dbms_scheduler調用大量處理。Oracle全球臨時表和使用存儲過程和功能
大多數數據庫表都有一個created_by列,默認從sys_context獲取其用戶名,但是當數據從dbms_scheduler運行時,此信息不可用,因此created_by列全部使用APP_GLOBAL填充。
我設法用sys_context值填充全局臨時表(GTT),並使用它從dbms_scheduler調用的存儲過程填充created_by,所以我的下一個邏輯步驟是將它放入函數中並調用它它可以在整個系統中使用,甚至可以在插入前觸發引用。
問題是,將代碼放入函數中時未找到來自GTT的數據。該表被設置爲保留行。
我已經拖網許多網站的答案,但沒有發現任何幫助我任何人都可以在這裏提供解決方案?
傑克,我已經成功地填充了與dbms_scheduler相同的會話的GTT,並且可以從中進行選擇。我將代碼放入函數中,以便可以從調度程序運行的所有存儲過程引用它,但是在引用該函數時,不會返回來自GTT的數據。你對created_by的假設幾乎是正確的,表達式是列的默認值,不在觸發器中。 – Colin 2010-12-10 09:58:50
@Colin對不起 - 對觸發器的引用是一個錯字 – 2010-12-10 10:11:06
@Colin調度程序將爲它運行的每個作業使用不同的會話 – 2010-12-10 10:12:01