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 :

réduction taille d'une colonne -> comment garder ses donn


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut réduction taille d'une colonne -> comment garder ses donn
    Bonjour à tous,

    Je travaille sous oracle 8i avec toad et sqlplus.
    Voilà, je veux faire passer une colonne d'un type varchar2(14) à un type varchar2(9), je vais donc employer la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ALTER TABLE nom_table
    MODIFY nom_colonne VARCHAR2(9)
    J'obtiens le message suivant:
    ORA-01441: une colonne doit être vide pour pouvoir diminuer sa largeur
    ce que je conçois très bien. :
    Le hic c'est que je tiens à conserver toutes les données de la table à modifier et de même sa clef primaire qui n'est autre que la colonne à changer et les procédures qui utilisent cette même colonne.. donc je ne veux pas vider ma colonne ou la dropper sans avoir un moyen de récupérer tous les liens et les données par la suite dans la nouvelle table

    les données de la table se compte en milliers de lignes donc on oublie un traitement manuel.

    Avez vous une idée?

    Merci d'avance pour les neurones que vous allez griller sur ce post, a+!

    Bukbi

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut Re: réduction taille d'une colonne -> comment garder ses
    Citation Envoyé par bukbi
    les données de la table se compte en milliers de lignes donc on oublie un traitement manuel.
    Pourtant il n'y a pas le choix... c'est la PK donc impossible de la vider et encore moins de la dropper

    Il faut désactiver toutes les FK, créer une colonne avec la bonne taille et copier la valeur de la PK dans cette colonne, dropper la colonne de la PK et renommer la nouvelle colonne...

    Mais il faut d'abord se poser la question suivante : est-ce vraiment nécessaire au regard du coût d'une telle opération

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 62
    Points : 63
    Points
    63
    Par défaut
    ce n est possible d'enlever la contraite PK? puis de la remettre une fois la modif effectué, d'apres un des cours que j ai dl ça serai possible mais bon ... ( y faut surment mieu ecouter orafrance )

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    si c'est possible mais il faut désactiver toutes les FK qui lui font référence... et puis comme tu vas dropper la colonne, aucun intérêt de désactiver la PK.

    Par contre, n'oublie pas de la recréer à l'identique avant de réactiver les FK bien sûr

  5. #5
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut Re: réduction taille d'une colonne -> comment garder ses
    Citation Envoyé par orafrance

    Il faut désactiver toutes les FK, créer une colonne avec la bonne taille et copier la valeur de la PK dans cette colonne, dropper la colonne de la PK et renommer la nouvelle colonne...
    yop,

    je viens me gréffer j'ai exactement le même soucis, sur une base 8i aussi

    par contre orafrance j'ai des soucis avec ta technique :

    Mon champ initial est NUMBER(5) je veux le passer en NUMBER(4) (c'est plus un problème de spécifs que de gains en performances)

    donc je crée une colonne temporaire en NUMBER(4) pour y copier les données de la colonne en NUMBER(5)

    requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ACCESRESEAU SET CLEACCESRESEAU_BACK=CAST(CLEACCESRESEAU AS NUMBER(4))
    avec où sans le cast je prend :
    ORA-01438: valeur incohérente avec la précision indiquée pour cette colonne
    La requete "complile" même pas, et je suis sur que mes données rentrent dans un NUMBER(4)

    une idée ?

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Le cast ne sert à rien. si les données stockées dans le NUMBER(5) sont inférieures à 9999, elle doivent s'insérer tout naturellement dans un NUMBER(4).

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    d'abord, si ta colonne ne dépasse JAMAIS 4 digit alors le CAST n'est pas obligatoire (réserve le plutôt à des convertions de type : Doc CAST)

    Tu peux me faire un : desc ACCESRESEAU pour voir ce que ça donne ?

    PS : le piratage de topic c'est mal

  8. #8
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Citation Envoyé par SheikYerbouti
    Le cast ne sert à rien. si les données stockées dans le NUMBER(5) sont inférieures à 9999, elle doivent s'insérer tout naturellement dans un NUMBER(4).
    autant pour moi, je me suis lamentablement vautré dans une conversion de taille.

    Effectivement ça va mieux


  9. #9
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Youpi ca marche!!

    Merci les gars et chapeau bat pour la rapidité de réponse!

    Alors voici ce que j'en sors au final en traitant juste la primary key:
    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
     
    ALTER TABLE nom_table
    DROP CONSTRAINT nom_contrainte
     
    ALTER TABLE nom_table
    ADD (nom_colonne_temp VARCHAR2(9))
     
    UPDATE ENTREPRISE SET nom_colonne_temp=nom_colonne
     
    ALTER TABLE nom_table
    DROP COLUMN nom_colonne
     
    CREATE TABLE temporary (nom_colonne, col1, col2 ,...) 
    AS SELECT nom_colonne_temp, col1, col2 ,... FROM nom_table; 
     
    DROP TABLE nom_table; 
     
    RENAME temporary TO nom_table; 
     
    ALTER TABLE nom_table
    ADD CONSTRAINT nom_contrainte PRIMARY KEY (nom_colonne)
    Ouf...je pense qu'il y a peut être moyen de faire plus court mais une chose est sûr: ça marche! alors si ca peut aider quelqu'un.

    Au fait pour renommer ma colonne j'ai essayer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER TABLE nom_table
    RENAME COLUMN old_nom_column TO new_nom_column
    mais mon "amour" de pc m'a répondu:
    ORA-14155: absence du mot-clé PARTITION ou SUBPARTITION
    du coup j'ai fait la manip ci-dessus.. qui a quand même l'avantage de rétablir l'ordre initial des colonnes. Vous savez pourquoi j'ai eu ce message d'erreur?

    Vraiment merci pour tout!
    Bukbi

    ps: le piratage de post me plait bien qd c'est fait de cette manière

  10. #10
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    En 8i, on ne peut renomer que la table ou une partition.

    Raison pour laquelle l'on demande toujours que le numéro de version soit indiqué dans les questions (ce que vous avez bien compris )

  11. #11
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    1 soit la table est partitioné
    ou
    2. version oracle = 9.0.1.x.x ou inférieur

  12. #12
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Ben c fini et résolu, a la prochaine!!
    Encore Merci à tous!!
    Bukbi heureux

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut Re: Ben c fini et résolu, a la prochaine!!
    Citation Envoyé par bukbi
    Encore Merci à tous!!
    Bukbi heureux
    Nous content, aussi

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/09/2010, 11h22
  2. Récupérer le type et la taille d'une colonne
    Par Progs dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 23/09/2005, 17h27
  3. [Oracle9i] Modification taille d'une colonne
    Par Jibees dans le forum Oracle
    Réponses: 14
    Dernier message: 05/08/2005, 11h25
  4. [JTable] ajuster la taille d'une colonne à la taille du texte
    Par GETah dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 24/02/2005, 11h53

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