是否应在PL/SQL代码中使用DBMS_STANDARD包的过程和/或函数?

Ada*_*ter 5 oracle triggers plsql

最近,我BEFORE INSERT OR UPDATE在桌子上遇到了触发器.在此触发,笔者依赖INSERTINGUPDATING函数(既返回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;
Run Code Online (Sandbox Code Playgroud)

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

在对这些函数收到的错误进行故障排除后,我们收到了"来自Oracle支持部门"的消息:"dbms_standard例程实际上并不是由用户程序调用".这是真的?

我发现这有点奇怪,考虑到PL/SQL代码中常用的其他程序(如RAISE_APPLICATION_ERRORCOMMIT).

Ton*_*ews 9

INSERTING,UPDATING和DELETING函数明确提供用于编写​​触发器代码(请参阅触发器文档),因此绝对不会禁止使用它们.类似地,RAISE_APPLICATION_ERROR被记录为供开发人员使用.

刚刚DESCribed DBMS_STANDARD肯定有一些我不知道的功能,也许不应该用在你自己的代码中(据我所知),例如GRANTEE.

通常,如果您可以找到Oracle官方文档,告诉您如何使用某些东西,那么可以使用它.