Я ищу лучший способ изменить тип данных столбца в заполненной таблице. Oracle позволяет изменять тип данных только в столбцах с нулевыми значениями.
До сих пор моим решением является оператор PLSQL, который хранит данные столбца, подлежащего изменению в коллекции, изменяет таблицу, а затем выполняет итерацию по коллекции, восстанавливая исходные данные с преобразованным типом данных.
-- Before: my_table ( id NUMBER, my_value VARCHAR2(255))
-- After: my_table (id NUMBER, my_value NUMBER)
DECLARE
TYPE record_type IS RECORD ( id NUMBER, my_value VARCHAR2(255));
TYPE nested_type IS TABLE OF record_type;
foo nested_type;
BEGIN
SELECT id, my_value BULK COLLECT INTO foo FROM my_table;
UPDATE my_table SET my_value = NULL;
EXECUTE IMMEDIATE 'ALTER TABLE my_table MODIFY my_value NUMBER';
FOR i IN foo.FIRST .. foo.LAST
LOOP
UPDATE my_table
SET = TO_NUMBER(foo(i).my_value)
WHERE my_table.id = foo(i).id;
END LOOP;
END;
/
Я ищу более опытный способ сделать это.