--PL/SQL——游标只返回第一行,然后循环结束
我有一个名为--PL/SQL——游标只返回第一行,然后循环结束,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个名为XXALD\u INT\u IN\u VEHICLE\u ITEM的表,其中有11行 我定义了一个游标: CURSOR LINE_VEH IS SELECT * FROM XXALD_INT_IN_VEHICLE_ITEM FOR UPDATE ; 我一行接一行地处理它,然后更新此行的一个字段(错误代码) 问题是,为什么在只完成第一行之后,循环就结束了? 其他10行未提取。能否将提交移到循环之外? 我认为它与f
XXALD\u INT\u IN\u VEHICLE\u ITEM
的表,其中有11行
我定义了一个游标:
CURSOR LINE_VEH IS
SELECT *
FROM XXALD_INT_IN_VEHICLE_ITEM
FOR UPDATE
;
我一行接一行地处理它,然后更新此行的一个字段(错误代码)
问题是,为什么在只完成第一行之后,循环就结束了?
其他10行未提取。能否将提交移到循环之外? 我认为它与for update游标冲突。(for update只存在于一个事务中。)
创建表EMP AS
从ROWNUM所在的员工中选择*
OPEN LINE_VEH;
LOOP
FETCH LINE_VEH INTO line;
EXIT WHEN LINE_VEH%NOTFOUND;
if line.ALD_PROSYS_OR_ATT_N is null then
v_error := v_error ||'ALD_PROD_SYSTEM|';
end if;
...
update XXALD_INT_IN_VEHICLE_ITEM
set ERROR_CODE= v_error
where current of LINE_VEH;
commit;
END LOOP;
CLOSE LINE_VEH;
CREATE TABLE EMP AS
SELECT * FROM EMPLOYEES WHERE ROWNUM <=11;
COMMIT;
SELECT * FROM EMP;
DECLARE
CURSOR LINE_VEH
IS
SELECT * FROM EMP FOR UPDATE;
line LINE_VEH%ROWTYPE;
v_error NUMBER;
--I take the lines one by one, and handle it, then update a field of this line(error_code).
BEGIN
OPEN LINE_VEH;
LOOP
FETCH LINE_VEH INTO line;
EXIT WHEN LINE_VEH%NOTFOUND;
IF line.DEPARTMENT_ID =200 THEN
v_error := 300;
END IF;
UPDATE EMP SET DEPARTMENT_ID= v_error WHERE CURRENT OF LINE_VEH;
--COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
END;