在过程调用上触发

时间:2018-09-18 07:36:15

标签: plsql oracle11g

我和我的团队开始着手进行旧的Oracle DB项目。整个业务逻辑都是用PL / SQL编写的,没有任何文档。

现在,我们希望获得所有内容的概述,尤其是要调用哪些过程/函数/包。问题在于,存在带有后缀_v1_v2_v1_org_v2_new的软件包,我们不知道它们中的哪一个真正在使用。

我们不想通过在每个函数或过程的开头添加一条日志记录语句来更改所有内容。

是否存在某种可以在函数调用时触发的触发器?

例如调用此代码

CREATE OR REPLACE FUNCTION helloWorld AS
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello world!');
END;

将输出类似这样的内容(行顺序无关)

Function "helloWorld" was called.
Hello world!

2 个答案:

答案 0 :(得分:2)

问题很广泛。在您的位置,我将从以下内容开始:

  • 确定输入点(如果可能):正在从数据库客户端应用程序中调用哪些过程/功能/程序包。
  • 将初始化部分添加到软件包中:

    create or replace package body my_package as 
    ...
    -- add this after all functions, procedures, etc:
    begin
      dbms_output.put_line('Package my_package is initialised');
    end;
    

    这将允许您定义使用哪些软件包。初始化部分在会话中的第一个包调用上执行一次。

  • 使用DBA_DEPENDENCIES系统视图检查数据库对象之间的依赖关系。

  • 此外,还有一个Audit功能,非常强大。请参见Ask Tom上的示例。也许这是您最好的选择。

答案 1 :(得分:1)

您可以使用DBMS_TRACE或DBMS_PROFILER来分析正在发生的事情。