我正在寻找最佳方式来更改已填充表中列的数据类型。 Oracle仅允许使用空值更改colums中的数据类型。更改生产数据库中的列数据类型
到目前为止,我的解决方案是一个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;
/
我正在寻找更有经验的方式来做到这一点。
简单的答案是停止数据库正在生产几个小时,而你正确地做到这一点。除非你停止向数据库写入信息,否则你绝不会保证**你已经拥有了一切正确的信息。 – Ben
桌子有多大?在这段时间内桌面是否必须提供给应用程序? –