Sto cercando il modo migliore per modificare un tipo di dati di una colonna in una tabella popolata. Oracle consente solo la modifica del tipo di dati nelle colonne con valori nulli.Modifica il tipo di dati della colonna nel database di produzione
La mia soluzione, finora, è un'istruzione PLSQL che memorizza i dati della colonna da modificare in una raccolta, altera la tabella e quindi scorre sulla raccolta, ripristinando i dati originali con il tipo di dati convertito.
-- 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;
/
Sto cercando un modo più esperto per farlo.
La semplice risposta è interrompere il database in produzione per alcune ore mentre lo si fa correttamente. Non garantirai mai ** che hai tutto corretto a meno che tu non impedisca alle persone di scrivere sul DB. – Ben
Quanto è grande il tavolo? Il tavolo deve essere disponibile per l'applicazione durante questo periodo? –