У меня есть процедура, которая обновляет ~ 700 строк из таблицы на основе определенных дат. Я хочу, если процедура по какой-то причине сработает, чтобы перезапустить процедуру, откуда она ушла, а не от начала (например: перейти к строке214).dynamic goto in oracle plsql
Если я пытаюсь что-то вроде этого:
begin
goto &label;
<N1>;
dbms_output.put_line(1);
<N2>;
dbms_output.put_line(2);
end;
это работает, но это будет предполагать, человеческое взаимодействие, и я хотел бы, чтобы процедура, чтобы сделать это автоматически.
Как я могу сделать что-то подобное без амперсанда (&)? Если я объявляю метку как переменную, она не работает или я не знаю, как заставить ее работать.
Возможно, вы захотите изменить логику. Блоки PL/SQL не предназначены для прямого взаимодействия человека во время выполнения. Ваша процедура должна иметь отдельные «Логические единицы», чтобы ее можно было повторно запустить. –
Создать специальную таблицу для статуса обновления. Вместо lables обертывают логику в операторы if-then, проверяющие статус обновления. Обновление статуса и фиксация после выполнения шага. На следующем этапе будет отображаться обновление состояния и нормально работать. При повторном запуске первые N шагов будут пропущены. Ручное взаимодействие требуется, если что-то совершается неправильно - в этом случае вам необходимо сбросить/изменить статус обновления в вашей таблице. –
Вопрос в том, как вы можете перейти goto динамически, я знаю, что вы можете, но я не знаю, как, проблема в том, как вы можете объявить метку как переменную. – Iulian