Comment supprimer une colonne sous SQL*Plus:

Résolu
belman Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
 AF11 -
Bonjour,
je suis nouveau ds ce forum et j'aimerai bien vous remercier pr ce site ki est variment super et trés interessant.
alors comme je suis un débutant en base de donnée j'arrive pas a supprimer une colonne que j'ai déja crée et idem pr une ligne voici ce ke j'ai fait comme commande
SQL> desc etudiant
Name Null? Type
------------------------------- -------- ----
NOM NOT NULL VARCHAR2(30)
PRENOM VARCHAR2(30)
DATE_NAISSANCE DATE
ANNEE DATE
SPECIALITE VARCHAR2(40)
NOTE NUMBER(8,2)

SQL> ALTER TABLE etudiant DROP COLUMN annee;
ALTER TABLE etudiant DROP COLUMN annee
*
ERREUR à la ligne 1:
ORA-00905: Mot-clé absent
alors si qq pe m'aider s'il vous plait ou me donner une suggestion et merci d'avance pr votre aide.
A voir également:

4 réponses

HostOfSeraphim Messages postés 6750 Date d'inscription   Statut Contributeur Dernière intervention   1 608
 
Une hypothèse ?

ALTER TABLE etudiant DROP (annee)


1
AF11
 
merci
0
HostOfSeraphim Messages postés 6750 Date d'inscription   Statut Contributeur Dernière intervention   1 608
 
Heu... c'est long ! Très long ! Et je trouve tout cela bien lourd (notamment niveau ressources).

Par contre, tu as un alter table... drop column dans le script, sûr que ça va marcher ? Visiblement le drop column n'est que depuis la 8.1.

1
belman Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,
je voulais juste préciser la version c'est SQL*Plus sous oracle 8.0.5.0.0
0
belman Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour ton aide mais ça marche pas
0
HostOfSeraphim Messages postés 6750 Date d'inscription   Statut Contributeur Dernière intervention   1 608
 
Alors il semblerait que le DROP COLUMN ne soit dans Oracle que depuis la version 8i.

Une solution serait de recréer la table, effacer l'ancienne table puis renommer la nouvelle table avec le nom de l'ancienne table :

CREATE TABLE etudiant2 AS SELECT nom, prenom, date_naissance, specialite, note FROM etudiant;
DROP TABLE etudiant;
RENAME TABLE etudiant2 etudiant;


0
belman Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   > HostOfSeraphim Messages postés 6750 Date d'inscription   Statut Contributeur Dernière intervention  
 
merci pour votre suggestion je vais essayer ça avec les commandes que tu m'as donné meme si je pense que c'est pas pratique de faire ça il y a surement une commande qui va résoudre ce pb parceque je vais pas a chaque fois que je veux réctifier une table m'amuser à supprimer tt la table ça sera une perte de temps tu penses pas et merci encore une fois
0
belman Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   > belman Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
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
0