Rechercher : dans
Par :

Comment supprimer une colonne sous SQL*Plus:

Dernière réponse le 17 fév 2009 à 18:12:13 belman, le 17 fév 2009 à 16:38:56 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « comment supprimer une colonne sous SQL*Plus: » dans :
SQL - Modification de table VoirModification de table Il est possible de supprimer une table grâce à la clause DROP, il existe aussi des commandes moins extrêmes permettant L'ajout de colonnes La modification de colonnes La suppression de colonnes Enfin, il est possible...
SQL - Mise à jour d'informations VoirLe SQL permet la modification d'une table par un utilisateur (pour peu qu'il ait les droits suffisants...). La modification d'une table consiste à: ajouter des tuples modifier des tuples existants ou bien supprimer des tuples Insertion de...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...

1

belman, le 17 fév 2009 à 17:05:58

Bonjour,
je voulais juste préciser la version c'est SQL*Plus sous oracle 8.0.5.0.0

Répondre à belman

2

HostOfSeraphim, le 17 fév 2009 à 17:11:01

Une hypothèse ?

ALTER TABLE etudiant DROP (annee)


Configuration : Linux Debian Lenny / Noyau 2.6.26 / Gnome / ­Iceweasel 3
Connexion Internet : ADSL Orange 8M (Livebox)

Répondre à HostOfSeraphim

3

belman, le 17 fév 2009 à 17:14:44

Merci pour ton aide mais ça marche pas

Répondre à belman

4

HostOfSeraphim, le 17 fév 2009 à 17:24:26

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;


Configuration : Linux Debian Lenny / Noyau 2.6.26 / Gnome / ­Iceweasel 3
Connexion Internet : ADSL Orange 8M (Livebox)

Répondre à HostOfSeraphim

5

belman, le 17 fév 2009 à 17:43:21

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

Répondre à belman

6

belman, le 17 fév 2009 à 17:50:07

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

Répondre à belman

7

 HostOfSeraphim, le 17 fév 2009 à 18:12:13

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.

Configuration : Linux Debian Lenny / Noyau 2.6.26 / Gnome / ­Iceweasel 3
Connexion Internet : ADSL Orange 8M (Livebox)

Répondre à HostOfSeraphim
Collection CommentÇaMarche.net