Oracle:FORALL SAVE EXCEPTIONS无效

时间:2016-03-11 13:44:53

标签: oracle plsql bulk forall

我正在尝试使用INSERT语句的SAVE EXCEPTIONS子句处理FORALL异常。该过程包含两个简单的表格,如下所示;

CREATE TABLE TBL1   
  ("COL1" VARCHAR2(**40** BYTE) NOT NULL);

CREATE TABLE TBL2   
  ("COL1" VARCHAR2(**20** BYTE) NOT NULL);

这里唯一的区别是列类型的大小。任何尝试插入超过20个字符的字符串值都会导致处理错误。

这是脚本;

DECLARE  
  TYPE REFCURTYPE IS REF CURSOR;
  REFCUR REFCURTYPE;  

  TYPE ASSARRTYPE IS TABLE OF TBL2%ROWTYPE
    INDEX BY PLS_INTEGER;
  ASSARR ASSARRTYPE;

  DML_ERRORS EXCEPTION;
  PRAGMA EXCEPTION_INIT(DML_ERRORS, -24381);
BEGIN
  OPEN REFCUR FOR
    SELECT
      COL1
    FROM TBL1;

  FETCH REFCUR BULK COLLECT INTO ASSARR; 
  CLOSE REFCUR;

  FORALL i IN ASSARR.FIRST..ASSARR.LAST SAVE EXCEPTIONS
    INSERT INTO TBL2 
      VALUES ASSARR(i);
  COMMIT;
  EXCEPTION
    WHEN DML_ERRORS THEN
      FOR j IN 1..SQL%BULK_EXCEPTIONS.COUNT
      LOOP
        DBMS_OUTPUT.PUT_LINE(SQLERRM(-(SQL%BULK_EXCEPTIONS(j).ERROR_CODE)));

      END LOOP;    
      COMMIT;
END;

不知何故,当为超过一个20多个字符的记录的数据集执行下面的块时,我只收到这个错误消息;

  

“ORA-06502:PL / SQL:数字或值错误:批量绑定:截断绑定”

提前感谢您的帮助。

0 个答案:

没有答案