Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 是否应在PL/SQL代码中使用DBMS_标准包的过程和/或函数?_Oracle_Plsql_Triggers - Fatal编程技术网

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笔记本告诉客户,没有我们的指导,不要使用未记录的参数或功能。”