J'ai une table nommée Je veux augmenter sa longueur à l'aide de cette instruction: P> aaa code> avec une colonne: ALTER TABLE ioa_invoice_line MODIFY FIXED_RATE NUMBER(26,15)
4 Réponses :
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 Si vous souhaitez ajouter 9 chiffres de précision décimale, je pense que vous devrez également em> augmenter la précision totale. Par conséquent, les éléments suivants doivent fonctionner: p> Notez que la précision est limitée à 38, avec votre besoin d'être dans cette limite. P> P> numéro (26,6) code> et la nouvelle précision souhaitée est numéro (26,15) code>. 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.
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. P>
Vous voulez probablement numéro (35,15). P>
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. P>
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();