Comment supprimer une colonne sous SQL*Plus:

Résolu/Fermé
belman Messages postés 10 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 17 février 2009 - 17 févr. 2009 à 16:38
 AF11 - 1 janv. 2014 à 10:14
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 jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 607
17 févr. 2009 à 17:11
Une hypothèse ?

ALTER TABLE etudiant DROP (annee)


1
merci
0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 607
17 févr. 2009 à 18:12
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 jeudi 11 décembre 2008 Statut Membre Dernière intervention 17 février 2009
17 févr. 2009 à 17:05
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 jeudi 11 décembre 2008 Statut Membre Dernière intervention 17 février 2009
17 févr. 2009 à 17:14
merci pour ton aide mais ça marche pas
0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 607
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;


0
belman Messages postés 10 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 17 février 2009 > HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016
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
0
belman Messages postés 10 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 17 février 2009 > belman Messages postés 10 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 17 février 2009
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
0