У меня есть вопрос о запуске сценария ddl в блоке oracle.
В основном я хочу что-то для переноса данных. Если у столбца изменился тип данных, я хочу сначала создать временный столбец, скопировать данные исходного столбца во временный столбец, затем удалить исходный столбец, переименовать временный столбец в исходный, чтобы завершить процесс миграции. Но когда я запускаю приведенный ниже скрипт, он только создает новый временный столбец и копирует данные в новый столбец, но никогда не запускает последние две команды alter table. Может кто нибудь разобраться в чем проблема? Спасибо.
create table t (a int);
insert into t values(10);
--change the data type from integer to varchar2(10);
begin
execute immediate 'alter table t modify a varchar2(10)';
exception when others then
begin
execute immediate 'alter table t add b varchar2(10)';
execute immediate 'update t set b = a';
execute immediate 'alter tabe t drop column a';
execute immediate 'alter table t rename column b to a';
exception when others then
dbms_output.put_line('cann''t change column a from integer to varchar2(10) due to error:' || sqlerrm);
end;
end;
/