Oracle 8i - Se débarrasser d'une colonne !
La tant attendue possibilité est là ! Pour cet exercice, plusieurs pas :
Créer la table test, mettre quelques index
/* || Creation et remplissage de la table d'ou on veut extirper une colonne || Creation de quelques index, juste pour voir ;-) || N'oublions pas de la créer dans un endroit non SYSTEM || Radu Caulea, Platinum Technology, 1999 */ set echo on drop table tab_col_drop; create table tab_col_drop ( nom varchar2(20), prenom varchar2(35), age number, naiss date); insert into tab_col_drop (nom, prenom, age, naiss) values ('Caulea','Radu', 39, to_date('28-06-1960','DD-MM-YYYY')); insert into tab_col_drop (nom, prenom, age, naiss) values ('Caulea','Stefan', 2, to_date('30-08-1997','DD-MM-YYYY')); insert into tab_col_drop (nom, prenom, age, naiss) values ('Caulea','Andreea', 2, to_date('30-08-1997','DD-MM-YYYY')); insert into tab_col_drop (nom, prenom, age, naiss) values ('Caulea','Alexandra', 7, to_date('30-09-1993','DD-MM-YYYY')); create index IDX_col_drop_prenom on tab_col_drop (prenom); create index IDX_col_drop_nom on tab_col_drop (nom); create index IDX_col_drop_age on tab_col_drop (age); create index IDX_col_drop_naiss on tab_col_drop (naiss); select index_name, table_name, tablespace_name from user_indexes where table_name = 'TAB_COL_DROP';
Désactiver une colonne, dropper les colonnes désactivées, dropper directement une colonne
/* || 1) Nous désactivons une colonne, ensuite nous droppons (;-)) || les colonnes non utilisées || 2) Drop d'une autre colonne || 2) Satelitement, suivi des index || Radu Caulea, Platinum Technology, 1999 */ set echo on -- rendons invisible une colonne alter table tab_col_drop set unused column age; -- est-elle invisible ? desc tab_col_drop; -- comment savoir que la table a des colonnes non utilisées ? select * from user_unused_col_tabs; -- l'index est maintenu ? select index_name, table_name, tablespace_name from user_indexes where table_name = 'TAB_COL_DROP'; -- achevons-la ! alter table tab_col_drop drop unused columns; desc tab_col_drop; -- supprimons une colonne alter table tab_col_drop drop column naiss; -- verification desc tab_col_drop; select index_name, table_name, tablespace_name from user_indexes where table_name = 'TAB_COL_DROP'; Doc Les index sont effacés, donc ! Ca marche ;-) #