Я пытаюсь обновить зарплату сотрудников, использующих forall. Всякий раз, когда во время обновления возникает какая-либо ошибка, мне нужно сохранить, для которой произошла ошибка идентификатора сотрудника. Но это дает следующее сообщение об ошибке при компиляции Error (14,24): PLS-00201: идентификатор 'INDX' должен быть объявленПолучение неудачных идентификаторов для всех исключений за исключением
Ниже мой код
PROCEDURE PROC1 (V_EMP_ID DBMS_SQL.NUMBER_TABLE)
IS
lv_error_string VARCHAR2(4000);
BEGIN
FORALL INDX IN V_EMP_ID.FIRST..V_EMP_ID.LAST SAVE EXCEPTIONS
EXECUTE IMMEDIATE 'UPDATE EMPLOYEES SET SALARY=SALARY+10000 WHERE EMP_ID=:1'
USING V_EMP_ID(INDX);
EXCEPTION
WHEN OTHERS
THEN
FOR J IN 1 .. SQL%BULK_EXCEPTIONS.COUNT
LOOP
lv_error_string:=lv_error_string
||sqlerrm (-sql%bulk_exceptions(j).error_code)
|| ' for'||V_EMP_ID(INDX);
END LOOP;
END;
Это работает, но не дает мне идентификатор сотрудника, для которого произошла ошибка @ XING – PTK
Так подходит к вашему вопросу я не знаю, почему вы делаете 'выполнить немедленное 'когда вы можете напрямую запустить' update'. См. Мое обновленное сообщение. Вы не получаете никакого 'employee_id' coz oracle doenot, чтобы найти какое-либо« исключение ». – XING