在 oracle 中从 "for all update" 成功更新 id
Getting successfully updated id's from "for all update" in oracle
我正在尝试批量更新记录。在 运行 进行所有更新后,我需要调用一个过程并将所有成功更新的 ID 作为参数之一发送到 procedure.All 那些由于某些错误而未执行更新的 ID 不应传递给步骤。我的代码如下。
DECLARE
type emp_type is TABLE OF number;
EMP_ID EMP_TYPE;
lv_select varchar2(4000):='select employee_id from EMPLOYEE where dept_NO=1';
BEGIN
EXECUTE IMMEDIATE lv_select BULK COLLECT INTO emp_id ;
FORALL INDX IN 1 ..emp_id.COUNT SAVE EXCEPTIONS
UPDATE emp Set salary=salary+1000
where employee_id=emp_id(INDX);
PROC (
PAR1=>'abc',
par2=>emp_id(INDX),
par3=>'xyz'
);
EXCEPTION
WHEN OTHERS
THEN
FOR J IN 1 .. SQL%BULK_EXCEPTIONS.COUNT
LOOP
DBMS_OUTPUT.PUT_LINE(SQLERRM (-SQL%BULK_EXCEPTIONS (j).ERROR_CODE));
END LOOP;
END;
这可以通过使用简单的 for 循环来简单地实现。希望下面的 snoippet 有所帮助。
DECLARE
type emp_type
IS
TABLE OF NUMBER;
EMP_ID EMP_TYPE;
lv_select VARCHAR2(4000):='select employee_id from EMPLOYEE where dept_NO=1';
BEGIN
EXECUTE IMMEDIATE lv_select BULK COLLECT INTO emp_id ;
FOR indx IN emp_id.first.emp_id.last
LOOP
BEGIN
UPDATE emp SET salary=salary+1000 WHERE employee_id=emp_id(indx);
PROC ( PAR1=>'abc', par2=>emp_id(INDX), par3=>'xyz' );
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(emp_id(indx)|| 'Failed due to '||sqlerrm||'-'||SQLCODE);
END;
end loop;
END;
我正在尝试批量更新记录。在 运行 进行所有更新后,我需要调用一个过程并将所有成功更新的 ID 作为参数之一发送到 procedure.All 那些由于某些错误而未执行更新的 ID 不应传递给步骤。我的代码如下。
DECLARE
type emp_type is TABLE OF number;
EMP_ID EMP_TYPE;
lv_select varchar2(4000):='select employee_id from EMPLOYEE where dept_NO=1';
BEGIN
EXECUTE IMMEDIATE lv_select BULK COLLECT INTO emp_id ;
FORALL INDX IN 1 ..emp_id.COUNT SAVE EXCEPTIONS
UPDATE emp Set salary=salary+1000
where employee_id=emp_id(INDX);
PROC (
PAR1=>'abc',
par2=>emp_id(INDX),
par3=>'xyz'
);
EXCEPTION
WHEN OTHERS
THEN
FOR J IN 1 .. SQL%BULK_EXCEPTIONS.COUNT
LOOP
DBMS_OUTPUT.PUT_LINE(SQLERRM (-SQL%BULK_EXCEPTIONS (j).ERROR_CODE));
END LOOP;
END;
这可以通过使用简单的 for 循环来简单地实现。希望下面的 snoippet 有所帮助。
DECLARE
type emp_type
IS
TABLE OF NUMBER;
EMP_ID EMP_TYPE;
lv_select VARCHAR2(4000):='select employee_id from EMPLOYEE where dept_NO=1';
BEGIN
EXECUTE IMMEDIATE lv_select BULK COLLECT INTO emp_id ;
FOR indx IN emp_id.first.emp_id.last
LOOP
BEGIN
UPDATE emp SET salary=salary+1000 WHERE employee_id=emp_id(indx);
PROC ( PAR1=>'abc', par2=>emp_id(INDX), par3=>'xyz' );
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(emp_id(indx)|| 'Failed due to '||sqlerrm||'-'||SQLCODE);
END;
end loop;
END;