J'ai trouvé la solution
voila ce qu'il faut faire:
premierement
On crée la table test par exemple , 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';
deuxièment:
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 ;-)
#
Et voilà c'est la recette la plus adéquate pour notre probleme s'il s'agit bien entendu de la version d'oracle 8.0.5.0.0