最近,我遇到了一个BEFORE INSERT OR UPDATE
在桌子上触发。在这个触发器中,作者依赖于INSERTING
and UPDATING
函数(都返回一个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_standard 例程实际上并不是由用户程序调用的”。这是真的?
考虑到其他程序(例如RAISE_APPLICATION_ERROR
and COMMIT
) 常用于 PL/SQL 代码中。
INSERTING、UPDATING 和 DELETING 函数明确提供用于编写触发代码(请参阅触发文档 http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#i1025109),所以绝对不禁止使用它们。类似地,RAISE_APPLICATION_ERROR 是有记录的 http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/errors.htm#i3329供开发人员使用。
刚刚描述了 DBMS_STANDARD 后,肯定有一些我不知道的函数,并且也许不应该在您自己的代码中使用(据我所知),例如 GRANTEE。
一般来说,如果你能找到Oracle官方文档告诉你如何使用某个东西,那么使用它就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)