Oracle 是否应在PL/SQL代码中使用DBMS_标准包的过程和/或函数?
最近,我在插入或更新表之前遇到了一个Oracle 是否应在PL/SQL代码中使用DBMS_标准包的过程和/或函数?,oracle,plsql,triggers,Oracle,Plsql,Triggers,最近,我在插入或更新表之前遇到了一个触发器。在这个触发器中,作者依靠DBMS_标准包的插入和更新函数(都返回一个布尔值)来确定触发器是在插入之前还是在更新之前触发的 例如: CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER BEFORE INSERT OR UPDATE ON CUSTOMER FOR EACH ROW BEGIN IF INSERTING THEN /* Some code */ END IF; IF UPDAT
触发器。在这个触发器中,作者依靠DBMS_标准
包的插入
和更新
函数(都返回一个布尔值
)来确定触发器是在插入之前还是在更新之前触发的
例如:
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_标准例程实际上并不意味着要由用户程序调用”。这是真的吗
我觉得这有点奇怪,因为PL/SQL代码中通常使用其他过程(如RAISE\u APPLICATION\u ERROR
和COMMIT
)。插入、更新和删除函数是为编写触发代码而明确提供的(请参阅),因此绝对没有禁止使用这些函数。类似地,RAISE_APPLICATION_ERROR将供开发人员使用
刚刚描述了DBMS_标准,其中肯定有一些函数我不知道,而且可能不应该在您自己的代码(据我所知)中使用,比如GRANTEE
一般来说,如果您可以找到Oracle官方文档,告诉您如何使用某个东西,那么就可以使用它。您是否有metalink便笺或其他公众(或至少是Oracle许可公众)可以查看的东西?如果不使用对标准in触发器的插入/更新调用,具体什么时候会使用它们?@Adam:不,这个建议不是来自Metalink注释。相反,它直接来自Oracle支持部门的服务请求。非常好!我们将与甲骨文商谈澄清。我怀疑一位一级分析师说:“啊哈,DBMS_标准没有文档记录,我手边的dandy笔记本告诉客户,没有我们的指导,不要使用未记录的参数或功能。”