Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
--PL/SQL——游标只返回第一行,然后循环结束_Sql_Oracle_Plsql - Fatal编程技术网

--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;