Oracle Ora-6502数字或值错误,请将空值插入到没有空列的表中
我正在使用下面的Oracle Ora-6502数字或值错误,请将空值插入到没有空列的表中,oracle,plsql,ora-06502,Oracle,Plsql,Ora 06502,我正在使用下面的批量提交过程将记录从表源插入到表1。 TABLE1上的COLUMN1定义为非空 有时我的表\u SOURCE返回零行,在这种情况下,我的进程失败并出现错误: Ora-6502数字或值错误 我试图使用异常中的NO\u DATA\u FOUND忽略该错误,但它也不起作用 你能告诉我如何解决这个问题吗 create or replace PROCEDURE PROC1 AS v_ErrNum NUMBER (20); v_ErrMsg
批量提交
过程将记录从表源
插入到表1
。
TABLE1
上的COLUMN1
定义为非空
有时我的表\u SOURCE
返回零行,在这种情况下,我的进程失败并出现错误:
Ora-6502数字或值错误
我试图使用异常中的NO\u DATA\u FOUND
忽略该错误,但它也不起作用
你能告诉我如何解决这个问题吗
create or replace PROCEDURE PROC1 AS
v_ErrNum NUMBER (20);
v_ErrMsg VARCHAR2 (270);
v_Last_Record PLS_INTEGER;
CURSOR c_Get_Record
IS
SELECT Column1, Column2, Column3
FROM Table1;
TYPE Target_Rec IS TABLE OF Table1%ROWTYPE
INDEX BY PLS_INTEGER;
a_Target_Rec Target_Rec;
TYPE FetchSet IS TABLE OF c_Get_Record%ROWTYPE;
a_Fetch_Set FetchSet;
TYPE cursor_var_type IS REF CURSOR;
CV cursor_var_type;
BEGIN
OPEN CV FOR
Select Column1, Column2, Column3 from TABLE_SOURCE where Column1 is NOT NULL;
FETCH CV
BULK COLLECT INTO a_Fetch_Set;
CLOSE CV;
v_Last_Record := a_Fetch_Set.LAST;
FOR i IN 1 .. v_Last_Record
LOOP
a_Target_Rec (i).Column1 := a_Fetch_Set (i).Column1;
a_Target_Rec (i).Column2 := a_Fetch_Set (i).Column2;
a_Target_Rec (i).Column3 := a_Fetch_Set (i).Column3;
END LOOP;
v_Last_Record := 0;
v_Last_Record := a_Target_Rec.LAST;
FORALL j IN 1 .. v_Last_Record
INSERT INTO TABLE1
VALUES a_Target_Rec (j);
COMMIT;
-- *** ** Error Handling ** ***
EXCEPTION
WHEN OTHERS THEN
v_ErrNum := SQLCODE ;
v_ErrMsg := SUBSTR( SQLERRM, 0, 250) ;
RAISE_APPLICATION_ERROR( -20067 , 'ERROR WHILE LOADING TABLE1 Error Msg: ' || dbms_utility.format_error_stack|| dbms_utility.format_error_backtrace) ;
ROLLBACK ;
END PROC1;
你有问题是因为
v_Last_Record := a_Fetch_Set.LAST;
FOR i IN 1 .. v_Last_Record
如果您的游标没有行,则大容量收集不会填充集合,且_Fetch_集为空。在本例中,LAST返回NULL。您应该检查这一点,或者使用一个_Fetch _Set.COUNT。那么,它在哪一行失败了???您能不能将其重写为简单的SQL?这更难理解,更容易出错,而且速度也会更慢。为了提高处理速度,我们切换到批量提交模式。正如Dmitry所建议的那样,我切换到了COUNT而不是LAST,并且它起作用了,查询复杂性与此无关——所有数据都是通过SQL访问的,而将PL/SQL逻辑放在上面只会减慢查询速度。不管怎样,很高兴它能起作用。