Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64-разрядная версия
Производственная версия PL / SQL 12.1.0.2.0 - Производство
TNS "CORE 12.1.0.2.0 Production" для 64-битной Windows: Версия
12.1.0.2.0 - Производственная версия NLSRTL 12.1.0.2.0 - Производственная
Этот код работает хорошо
ALTER TABLE ACTIONLOG MODIFY (ID GENERATED ALWAYS AS IDENTITY START WITH 8);
но когда я использовал с выполнением немедленной выдачи ошибки
declare
mvalue INTEGER;
exp varchar(1000);
begin
select max(coalesce(ID,0))+1 into mvalue from ACTIONLOG;
exp := 'ALTER TABLE ACTIONLOG MODIFY (ID GENERATED ALWAYS AS IDENTITY START WITH '|| mvalue ||');';
dbms_output.Put_line('Max Value: '|| mvalue);
DBMS_OUTPUT.PUT_LINE('Expression: ' || exp);
execute immediate exp;
end;
/
Вывод СУБД
Максимальное значение: 8
Выражение: ALTER TABLE ACTIONLOG MODIFY (ИДЕНТИФИКАЦИЯ, СОЗДАВАЕМАЯ ВСЕГДА, КАК ИДЕНТИФИКАЦИЯ НАЧИНАЕТСЯ С 8);
Ошибка
Ошибка при запуске со строки: 1 в команде - объявить mvalue INTEGER; exp
варчар (1000); begin select max (coalesce (ID, 0)) + 1 в mvalue из
ACTIONLOG; exp: = 'ALTER TABLE ACTIONLOG MODIFY (ID СОЗДАЕТСЯ ВСЕГДА
КАК ИДЕНТИЧНОСТЬ НАЧИНАЕТСЯ С »|| mvalue || ');'; dbms_output.Put_line ('Макс.
Значение: '|| mvalue); DBMS_OUTPUT.PUT_LINE ('Выражение:' || exp);
выполнить немедленное exp; конец; Отчет об ошибке - ORA-01735: неверный ALTER TABLE
вариант ORA-06512: в строке 9
- 00000 - "неверная опция ALTER TABLE"
*Причина:
*Действие:
Изменить: проблема заключалась в ";"
Итак, ответ таков:
exp := 'ALTER TABLE ACTIONLOG MODIFY (ID GENERATED ALWAYS AS IDENTITY START WITH '|| mvalue ||');';
вместо того
exp := 'ALTER TABLE ACTIONLOG MODIFY (ID GENERATED ALWAYS AS IDENTITY START WITH '|| mvalue ||')';