Création
d'entreprise
Posez votre question Signaler

Comment supprimer une colonne sous SQL*Plus: [Résolu]

belman 5Messages postés 11 décembre 2008Date d'inscription - Dernière réponse le 17 févr. 2009 à 18:12
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.
Lire la suite 

Comment supprimer une colonne sous SQL*Plus »

7 réponses
Réponse
+1
moins plus
Une hypothèse ?

ALTER TABLE etudiant DROP (annee)


Ajouter un commentaire
Réponse
+1
moins plus
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.

Ajouter un commentaire
Réponse
+0
moins plus
bonjour,
je voulais juste préciser la version c'est SQL*Plus sous oracle 8.0.5.0.0
Ajouter un commentaire
Réponse
+0
moins plus
merci pour ton aide mais ça marche pas
HostOfSeraphim- 17 févr. 2009 à 17:24
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;


belman- 17 févr. 2009 à 17:43
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
belman- 17 févr. 2009 à 17:50
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
Ajouter un commentaire
Ce document intitulé « comment supprimer une colonne sous SQL*Plus: » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?