首页 > 解决方案 > 为什么绑定数组为空时 FORALL 不抛出值错误?

问题描述

我有一个示例代码FORALL

CREATE TABLE dummy (n NUMBER);
DECLARE
   TYPE numbers_t IS TABLE OF NUMBER;
   num   numbers_t := numbers_t ();
BEGIN

    FORALL indx IN NULL .. 10
   INSERT INTO dummy (n)
        VALUES (num (indx));

   DBMS_OUTPUT.put_line ('No error');

   EXCEPTION
   WHEN VALUE_ERROR
   THEN
      DBMS_OUTPUT.put_line ('Error');
END;

输出

    No error

为什么当绑定数组的上限或下限为空时,FORALL 不会像 for 循环语句那样抛出值错误?

标签: oracle

解决方案


没有理由简单地抛出错误,因为如果绑定数组没有上限和下限,则不会使用 FORALL 批量执行 DML 操作。我不知道甲骨文背后的真正意图。

对于为什么 FOR LOOP 抛出 Value 错误异常而 FORALL 没有看到任何正确的解释,我还没有看到。您可以查看 FORALL 的示例以了解其工作原理。 https://livesql.oracle.com/apex/livesql/file/content_CAV7T5WWK3ATEVKRBAPNOZ430.html https://oracle-base.com/articles/9i/bulk-binds-and-record-processing-9i


推荐阅读