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

Oracle Discussion :

[Modification données] Comment revenir en arrière?


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut [Modification données] Comment revenir en arrière?
    Bonjour,

    j'ai une table dont un champt été à number(6,2).
    je l'ai modifié en number(9,2) mais je me suis trompée.
    Il faut la remettre à number(6,2).
    Et il ne veut pas.
    Quelqu'un a t'il une solution?
    c'est urgent.

  2. #2
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Pourquoi il ne veux pas ?
    quelle est l'erreur une personne à déjà alimenter le champs avec un valeur supérieur à un number(6,2) ?

    Si oui il faut identifier ces valeurs afin de les corriger avant toute modification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select * from matable 
    where champs1 > 9999.99
    or champs1 < -9999.99;
    Tant que la requête ci dessous retourne des lignes tu ne pourras pas faire un retour arrrière.

    Sinon, si oracle refuse de sous dimensionner un chamsp number alors
    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
     
    --1 créé un nouveau champ'
    alter table matable add champs2 number(6,2);
     
    --2 sauve les valeurs du champs1 (celui modifié en number(9.2))
    update matable
    set champs2 = champs1, champs1 = null;
     
    --3 modifier le champs1 qui est null à présent
    alter table matable modify champs1 number(6,2)
     
    --4 remettre les bonnes valeurs dans le champs1
    update matable set champs1 = champs2;
    --5 dropper le champs2
    alter table matable drop column champs2;
    sinon un peu plus de précision serait bien venu, version , message d'erreur oracle ....

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Non je n'ai aucune valeur retournée.
    Il ne veut pas faire de changement tant que la colonne n'est pas vide..
    j'ai l'erreur oracle ORA-01440.

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    version oracle : 9i

  5. #5
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    Tu peux ajouter une colonne temporairement

    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
     
    SQL> create table t(n number(9,2));
     
    Table created.
     
    SQL> insert into t values (0);
     
    1 row created.
     
    SQL> alter table t add (n1 number(6,2));
     
    Table altered.
     
    SQL> update t set n1=n, n=null;
     
    1 row updated.
     
    SQL> alter table t drop column n;
     
    Table altered.
     
    SQL> alter table t add (n number(6,2));
     
    Table altered.
     
    SQL> update t set n=n1,n1=null;
     
    1 row updated.
     
    SQL> alter table t drop column n1;
     
    Table altered.
     
    SQL> set lin 50
    SQL> desc t
     Name                    Null?    Type
     ----------------------- -------- ----------------
     N                                NUMBER(6,2)

    note: sygale a été plus rapide (et meilleurs) que moi poster sa réponse ;-)

  6. #6
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    si tu veux faire ça online, il faut jeter un oeil à DBMS_REDEFINITION

  7. #7
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par claralavraie
    Non je n'ai aucune valeur retournée.
    Il ne veut pas faire de changement tant que la colonne n'est pas vide..
    j'ai l'erreur oracle ORA-01440.
    Dans ce cas la solution est le champs temporaire tel que décrit dans mon post précédent "Sinon, si oracle refuse de sous dimensionner un chamsp number alors "

  8. #8
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    OK merci..
    cela fonctionne..
    prends beaucoup de temps car plus de 1 millions de données mais au moins, je peux remettre ma colonne à number 6,2..
    Merci encore une fois ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Comparaison de version ou comment revenir en arrière ?
    Par franck34matlab dans le forum WinDev
    Réponses: 10
    Dernier message: 29/05/2014, 17h21
  2. [Toutes versions] TextStream Comment revenir en arrière
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/09/2013, 09h27
  3. Réponses: 6
    Dernier message: 26/05/2010, 10h35
  4. [REG EXPR] comment revenir en arrière
    Par floanne dans le forum Langage
    Réponses: 13
    Dernier message: 17/12/2007, 11h09

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