PL SQL - 过程 - 包含执行过程的用户记录的表

时间:2016-09-25 18:41:05

标签: stored-procedures plsql procedure plsqldeveloper

如果问题已经提出,请您提前道歉。我无法得到答案。

我想知道是否有一个表包含已执行特定过程或函数的oracle用户名记录。

我正在尝试创建一个可以被另一个程序作为子程序调用的过程。我想要创建的过程将在每次执行其他过程时创建一个日志条目。以下示例;

User_Name =执行该功能的人员的Oracle用户名。

Name =过程或函数的名称。

LastCompileDT =上次编译函数或过程的日期/时间。

我有点卡在哪里从中获取数据。 我遇到过all_source表,但它只给了我程序的所有者而不是执行用户。

非常感谢任何反馈。

由于

2 个答案:

答案 0 :(得分:1)

可能有几种方法可以做到这一点。也许其他人可以建议从一个数据字典视图中提取所有这些数据的方法。但是,我的方法是这样的:

  1. User_Name:使用关键字USER。它返回执行过程的Oracle用户:

    SELECT USER FROM DUAL;
    

    但是,如果您对执行该过程的操作系统用户感兴趣,那么您可以使用以下

    SELECT sys_context( 'userenv', 'os_user' ) FROM DUAL;
    

    有关此here的更多信息。据我所知,这只能在运行中获取,默认情况下不会记录在任何地方。所以你需要在调用程序时运行它。

  2. 程序名称:&

  3. LastCompileDT:可以从视图USER_OBJECTS

    中获取
    SELECT OBJECT_NAME, LAST_DDL_TIME
    FROM USER_OBJECTS
    WHERE OBJECT_TYPE = 'PROCEDURE'
    AND OBJECT_NAME = '<YOUR PROCEDURE NAME>';
    

答案 1 :(得分:1)

您可以使用提供的内置审核表,而不是滚动自己的审核。

请参阅https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4007.htm

--Create a test procedure as an example
CREATE PROCEDURE my_test_proc
AS
BEGIN
   NULL;
END my_test_proc;

--Turning on auditing executions of the proc
AUDIT EXECUTE ON my_test_proc BY ACCESS WHENEVER SUCCESSFUL;

--Run the proc
EXEC my_test_proc;

--check audit history
SELECT *
  FROM dba_common_audit_trail cat
 WHERE cat.object_name = 'MY_TEST_PROC';

dba_common_audit_trail表包含DB_USER列和User_Name / Name的OBJECT_NAME。

对于上次编译的时间,请参阅Hawk的答案,或者如果您想查看上次DDL时间的历史记录,可以将其添加到审核中

--Turn on auditing of creating procs
AUDIT CREATE PROCEDURE BY ACCESS;