我正在尋找最佳方式來更改已填充表中列的數據類型。 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
桌子有多大?在這段時間內桌面是否必須提供給應用程序? –