Кто-то вставил данные здесь и там без использования последовательности, поэтому теперь некоторые таблицы не синхронизированы c, я создал этот скрипт для их восстановления.
declare
l_val number;
maxvalueid number;
begin
execute immediate 'select s_ref_declinaison_geo.nextval from dual' INTO l_val;
execute immediate 'select max(id_technique) from t_ref_declinaison_geo' INTO maxvalueid;
execute immediate 'alter sequence s_ref_declinaison_geo increment by +' || maxvalueid-l_val;
end;
/
однако я получаю
PLS-00382: expression du mauvais type (bad type expresion)
ORA-06550: Ligne 7, colonne 5 :
PL/SQL: Statement ignored
Location : sql/V12.x/xxxxx.sql (C:\checkouts\web\xxxxx-data\flyway\sql\V12.x\XXXXXXXXXXXXXXXX)
Line : 4
Statement : declare
l_val number;
maxvalueid number;
begin
execute immediate 'select s_ref_declinaison_geo.nextval from dual' INTO l_val;
execute immediate 'select max(id_technique) from t_ref_declinaison_geo' INTO maxvalueid;
execute immediate 'alter sequence s_ref_declinaison_geo increment by +' || maxvalueid-l_val;
end;
Une erreur est survenue lors de l'exécution de flyway.
поэтому я предполагаю, что это не нравится: maxvalueid-l_val
Но почему?
Спасибо.
РЕДАКТИРОВАТЬ:
здесь финальный сценарий
DECLARE
l_val number;
maxvalueid number;
offset number;
BEGIN
execute immediate 'select s_ref_declinaison_geo.nextval from dual' INTO l_val;
execute immediate 'select max(id_technique) from t_ref_declinaison_geo' INTO maxvalueid;
offset := maxvalueid-l_val;
IF offset > 0
execute immediate 'alter sequence s_ref_declinaison_geo increment by +' || offset;
execute immediate 'select s_ref_declinaison_geo.nextval from dual' INTO l_val;
execute immediate 'alter sequence s_ref_declinaison_geo increment by +1';
END IF
END;
/