【问题标题】:Trigger on procedure call触发过程调用
【发布时间】:2018-09-18 19:25:38
【问题描述】:

我和我的团队开始着手处理一个遗留的 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!

【问题讨论】:

  • 不,没有这样的触发器。

标签: plsql oracle11g


【解决方案1】:

这个问题相当广泛。在你的位置,我将从以下开始:

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

    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 上的示例。也许这对你来说是最好的。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这很有趣。我会尝试这种方法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2023-04-02
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多