11
votes

Augmentation de la précision ou de l'échelle de la colonne de numéro dans Oracle

J'ai une table nommée aaa code> avec une colonne: xxx pré>

Je veux augmenter sa longueur à l'aide de cette instruction: P>

ALTER TABLE ioa_invoice_line MODIFY FIXED_RATE NUMBER(26,15) 


0 commentaires

4 Réponses :


15
votes

Vous ne pouvez pas réduire la précision d'une colonne numérique dans Oracle ( référence ). Ce qui est intéressant de votre question est l'ancienne précision est numéro (26,6) et la nouvelle précision souhaitée est numéro (26,15) . Cela fait apparaître, à première vue, que les deux colonnes auraient les mêmes chiffres de précision totale. Je crois peut-être être une source de votre confusion. Cependant, le premier cas comporte 6 décimales de précision alors que la seconde a 15 places. Les 9 chiffres de précision étant ajoutés à la colonne viennent probablement au coût de la précision à gauche de la décimale. Par conséquent, cela pourrait faire tronquer certaines de vos données.

Si vous souhaitez ajouter 9 chiffres de précision décimale, je pense que vous devrez également augmenter la précision totale. Par conséquent, les éléments suivants doivent fonctionner: xxx

Notez que la précision est limitée à 38, avec votre besoin d'être dans cette limite.


0 commentaires

2
votes

nombre (26,6) signifie 26 chiffres, dont 6 décimales, laissant 20 chiffres pour la partie entière. Nombre (26,15) signifie - Eh bien, vous pouvez le comprendre. Qui ne laisse que 11 chiffres pour la partie intégrante, entraînant des conflits potentiels avec les données existantes.

Vous voulez probablement numéro (35,15).


0 commentaires

1
votes

Vous avez besoin de créer une nouvelle table avec une structure à partir de la table source, mais avec une nouvelle précision de colonne Ed_Date. Ensuite, copiez toutes les données de la table source vers une nouvelle table, la table de goutte de source et après cette réname Table de destination en tant que table source.


0 commentaires

2
votes

Vous pouvez le renommer, puis créer une nouvelle colonne, copier toutes les valeurs là-bas et supprimer l'ancienne colonne:

alter table ioa_invoice_line add ED_RATE_TMP NUMBER(26,6);
alter table ioa_invoice_line modify column ED_RATE null;
update ioa_invoice_line set ED_RATE_TMP=ED_RATE, ED_RATE=null;
alter table ioa_invoice_line modify column ED_RATE NUMBER(26,15);
update ioa_invoice_line set ED_RATE=ED_RATE_TMP;
alter table ioa_invoice_line modify column ED_RATE not null;
alter table ioa_invoice_line drop column ED_RATE_TMP;
execute utl_recomp.recomp_serial();


0 commentaires