代码之家  ›  专栏  ›  技术社区  ›  Adam Paynter

在pl/sql代码中应该使用dbms_标准包的过程和/或函数吗?

  •  5
  • Adam Paynter  · 技术社区  · 14 年前

    最近,我遇到一个 BEFORE INSERT OR UPDATE 表上的触发器。在这个触发器中,作者依赖于 INSERTING UPDATING 功能(均返回A BOOLEAN DBMS_STANDARD 包来确定触发器是在插入之前还是在更新之前激发的。

    例如:

    CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER
      BEFORE INSERT OR UPDATE ON CUSTOMER
      FOR EACH ROW
    BEGIN
      IF INSERTING THEN
        /* Some code */
      END IF;
    
      IF UPDATING THEN
        /* Some other code */
      END IF;
    END;
    

    是的,我知道可以编写两个单独的触发器来分别处理这两个事件。这不是问题的关键。

    在对这些函数接收到的错误进行故障排除后,我们(从Oracle支持部门)收到一个字:“DBMS-U标准例程实际上并不打算由用户程序调用”。这是真的吗?

    考虑到其他程序(如 RAISE_APPLICATION_ERROR COMMIT )通常在pl/sql代码中使用。

    1 回复  |  直到 14 年前
        1
  •  9
  •   Tony Andrews    14 年前

    插入、更新和删除功能是专门为编写触发器代码而提供的(请参见 trigger documentation ,所以绝对没有禁止使用这些。同样,引发应用程序错误是 documented 供开发人员使用。

    在刚刚描述了DBMS标准之后,其中肯定有一些我不知道的函数,这些函数可能不应该在您自己的代码中使用(据我所知),比如grantee。

    一般来说,如果您可以找到Oracle官方文档,告诉您如何使用某些东西,那么可以使用它。