Convertire una colonna da Varchar2 a CLOB e conservare i dati esistenti

Il campo NOTE (attualmente è Varchar2) della tabella T2317 deve diventare di tipo CLOB mantenendo i valori esistenti.

Di seguito alcune soluzioni:

1) aggiungere colonna CLOB, fare update della colonna con i valori della colonna precedente in varchar2 e successivamente eliminare colonna varchar2 e rinominare nome colonna clob al nome originale.

2) creazione della tabella con nuovo nome e il campo aggiornato e fare insert as a select ( o utilizzare conversione to_clob ).

3) export e import dei dati nella nuova tabella

Caso 1
Nel mio esempio si tratta di un db versione 9.
-- backup tabella
exp \"sys/xxxxx as sysdba\" TABLES=(.T2317R) file=exp_T2317R.dmp log=exp_T2317R.log consistent=y

Possiamo seguire due strade
Opzione 1 
Inserimento della nuova colonna alla fine della tabella 
-- aggiungere colonna CLOB,
ALTER TABLE T2317R ADD (appo CLOB);
-- fare update della colonna con i valori della colonna precedente in varchar2 
UPDATE T2317R SET appo = NOTE;
-- successivamente eliminare colonna varchar2 
ALTER TABLE T2317R DROP COLUMN NOTE;
--rinominare nome colonna clob al nome originale.
ALTER TABLE T2317R rename column appo to NOTE;


Opzione 2
La nuova colonna Clob conserverà la posizione della colonna originaria
    
ALTER TABLE T2317R ADD NOTE_COPY VARCHAR2 (4000 Byte)
UPDATE T2317R SET NOTE_COPY = NOTE;
commit;
UPDATE T2317R SET NOTE = NULL;
commit;
ALTER TABLE T2317R MODIFY NOTE LONG;
---
ALTER TABLE T2317R MODIFY NOTE CLOB;

UPDATE T2317R SET NOTE = NOTE_COPY ;
commit;
ALTER TABLE T2317R DROP COLUMN NOTE_COPY ;

Occorre ricostruire gli indici relativi alla colonna aggiornata.
ALTER INDEX <nome indice> REBUILD;


Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione