IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Oracle 8i : vider une colonne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut Oracle 8i : vider une colonne
    Bonjour,

    existe-t-il une commande SQL qui permet de "vider" une colonne sans passer par la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER MaTable SET Macolonne=NULL
    En effet, cela peut être assez long sur un volume important, et j'aimerais optimiser cette commande, un peu comme un TRUNCATE qui est plus rapide qu'un DELETE.

    Merci !

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tout d'abord, ALTER MaTable SET Macolonne=NULL, ce n'est pas une commande valide.

    Bon, pour éviter un update, tu peux éventuellement dropper et recréer la colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    SQL> create table t as select 1 x, 2 y from dba_objects;
     
    Table created.
     
    Elapsed: 00:00:01.56
    SQL> update t set y=null;
     
    10760 rows updated.
     
    Elapsed: 00:00:38.15
    SQL> commit;
     
    Commit complete.
     
    Elapsed: 00:00:00.00
    SQL> drop table t;
     
    Table dropped.
     
    Elapsed: 00:00:00.06
    SQL> create table t as select 1 x, 2 y from dba_objects;
     
    Table created.
     
    Elapsed: 00:00:00.60
    SQL> alter table t set unused column y;
     
    Table altered.
     
    Elapsed: 00:00:00.04
    SQL> alter table t add (y number);
     
    Table altered.
     
    Elapsed: 00:00:00.03
    SQL> alter table t drop unused columns;
     
    Table altered.
     
    Elapsed: 00:00:09.37
    le drop unused, tu peux le faire la nuit...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut
    Merci pour ta réponse Laurent.
    J'avais pensé à cette possibilité, mais je dois faire cela plusieurs dizaines de fois dans une proc PL/SQL. Donc je ne pense pas que cela soit trés indiqué.
    De plus, le fait de dropper la colonne puis de la recréer ne risque t'il pas de désorganiser la base plus qu'un update?

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    oui, la colonne ne sera plus à la même place, et si elle est indexée, ça ne va pas aider... C'est clair que UPDATE est plus propre!

  5. #5
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Citation Envoyé par laurentschneider
    oui, la colonne ne sera plus à la même place, et si elle est indexée, ça ne va pas aider... C'est clair que UPDATE est plus propre!
    Sans parler des procédures, fonctions, packages, etc... qui font réference à la table et qui seront invalidés, donc à recompiler !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 36
    Par défaut
    Vous avez raison.
    eh bien j'oublie cette solution et je reste sur mon update.
    Merci pour vos réponses.

Discussions similaires

  1. [XL-2010] Procédure pour vider une colonne en fonction d'un choix liste.
    Par askior dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/04/2015, 16h35
  2. Oracle 10g - Définir une colonne auto-incrémentée
    Par david71 dans le forum Oracle
    Réponses: 2
    Dernier message: 14/01/2008, 16h40
  3. [Oracle 9i] aide modification d'une colonne
    Par bubblelicious dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/03/2006, 15h29
  4. [Oracle 7.3.4]Supprimer une colonne d'une table
    Par soazig dans le forum Oracle
    Réponses: 6
    Dernier message: 23/02/2006, 19h24
  5. Réponses: 14
    Dernier message: 28/10/2005, 18h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo