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:
1 2
| ALTER TABLE nom_table
MODIFY nom_colonne VARCHAR2(9) |
J'obtiens le message suivant:
Citation:
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+!
:D
Bukbi
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 :?
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:
UPDATE ACCESRESEAU SET CLEACCESRESEAU_BACK=CAST(CLEACCESRESEAU AS NUMBER(4))
avec où sans le cast je prend :
Citation:
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 ? :roll:
Ben c fini et résolu, a la prochaine!!
Encore Merci à tous!!
Bukbi heureux :)
Re: Ben c fini et résolu, a la prochaine!!
Citation:
Envoyé par bukbi
Encore Merci à tous!!
Bukbi heureux :)
Nous content, aussi :!: