Oracle PL / SQL:数值或值错误

时间:2015-11-27 06:10:24

标签: oracle plsql

我遇到的问题是,在循环中,我得到使用NUMBER的数字或值错误。用于LR_UPDATE_ROWS的测试数据im当前包含2个元素。两者都是NUMBER类型。 LR_UPDATE_ROWS本身的类型是PL / SQL表类型,由NUMBER(3,0)列组成。

代码如下:

        DBMS_OUTPUT.PUT_LINE(LR_UPDATED_ROWS.FIRST); /* Prints out 1 */
        DBMS_OUTPUT.PUT_LINE(LR_UPDATED_ROWS.LAST);  /* Prints out 2 */
        a := LR_UPDATED_ROWS.FIRST; /* Assignment works */
        b := LR_UPDATED_ROWS.LAST;  /* Assignment works */
        DBMS_OUTPUT.PUT_LINE(a);  /* Prints out 1 */
        DBMS_OUTPUT.PUT_LINE(b);  /* Prints out 2 */

        IF LR_UPDATED_ROWS IS NOT NULL THEN
            IF LR_UPDATED_ROWS.FIRST = 1 AND LR_UPDATED_ROWS.LAST = 1 THEN
              lv_rows_lst:=lv_rows_lst||','||LR_UPDATED_ROWS(1);
            ELSE
              FOR I IN LR_UPDATED_ROWS.FIRST..LR_UPDATED_ROWS.LAST
              LOOP
                lv_rows_lst:=lv_rows_lst||','||LR_UPDATED_ROWS(I);
              END LOOP;
            END IF;

            lv_rows_lst:=SUBSTR(lv_rows_lst,2,LENGTH(lv_rows_lst));
            OPEN LS_CUR FOR 'SELECT * FROM DOCUMENT_QUEUE DQ WHERE DQ.ENV_ID IN ('||lv_rows_lst||')';
        ELSE
            LS_CUR := LS_CUR;    
        END IF;

行:“FOR I IN LR_UPDATED_ROWS.FIRST..LR_UPDATED_ROWS.LAST”给出了错误:" PL / SQL:数字或值错误“。
我在网上发现的关于这个错误的所有研究都表明它是某种转换或数字大小不兼容错误。不幸的是,我无法理解以哪种方式。

感谢所有帮助和提示。

1 个答案:

答案 0 :(得分:1)

    Try this.

    DBMS_OUTPUT.PUT_LINE(LR_UPDATED_ROWS.FIRST);
    /* Prints out 1 */
    DBMS_OUTPUT.PUT_LINE(LR_UPDATED_ROWS.LAST);
    /* Prints out 2 */
    a := LR_UPDATED_ROWS.FIRST;
    /* Assignment works */
    b := LR_UPDATED_ROWS.LAST;
    /* Assignment works */
    DBMS_OUTPUT.PUT_LINE(a);
    /* Prints out 1 */
    DBMS_OUTPUT.PUT_LINE(b);
    /* Prints out 2 */
    IF LR_UPDATED_ROWS.EXISTS(1) THEN
/* Still not getting the use of this piece of code */
      IF LR_UPDATED_ROWS.FIRST = 1 AND LR_UPDATED_ROWS.LAST = 1 THEN
        lv_rows_lst           :='SELECT COLUMN_VALUE FROM TABLE(LR_UPDATED_ROWS)';
      ELSE
        FOR I IN LR_UPDATED_ROWS.FIRST..LR_UPDATED_ROWS.LAST
        LOOP
          lv_rows_lst:=lv_rows_lst||','||LR_UPDATED_ROWS(I);
        END LOOP;
      END IF;
      lv_rows_lst:=SUBSTR(lv_rows_lst,2,LENGTH(lv_rows_lst));
      OPEN LS_CUR FOR 'SELECT * FROM DOCUMENT_QUEUE DQ WHERE DQ.ENV_ID IN ('||lv_rows_lst||')';
    ELSE
      LS_CUR := LS_CUR;
    END IF;