我遇到的问题是,在循环中,我得到使用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:数字或值错误“。
我在网上发现的关于这个错误的所有研究都表明它是某种转换或数字大小不兼容错误。不幸的是,我无法理解以哪种方式。
感谢所有帮助和提示。
答案 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;