SQL Plus: как предотвратить автоматическое округление числа - PullRequest
0 голосов
/ 16 мая 2018

У меня есть требование перенести значения Oracle db в csv с помощью SQL Plus для сравнения числовых значений с десятичной точкой 10 цифр.

Но числа автоматически округляются до 8 десятичных знаков.Есть ли способ, которым мы можем отключить округление чисел в SQLPlus.Ниже приведены подробности.

enter image description here

Вот мои команды SQL Set.

SET UNDERLINE OFF
SET PAGESIZE 50000
SET NEWPAGE NONE
SET WRAP OFF
SET COLSEP ,     -- SEPARATE COLUMNS WITH A COMMA
SET FEEDBACK OFF
SET TRIMS ON
SET TRIMSPOOL ON
SET DEFINE ON
SET termout ON
SET verify ON
SET linesize 600

Может кто-нибудь помочь мне в этом.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Возможно, вы ищете опцию форматирования столбца для принудительного форматирования столбца

COLUMN column_name FORMAT 999999.0000000000
0 голосов
/ 16 мая 2018

Числовые значения не имеют внутреннего формата, поэтому ваш клиент сам решает, как их отобразить.Я не уверен, какой клиент выдает значения 'DB', но значения SQL * Plus равны , используя его значения по умолчанию :

SQL * Plus обычно отображает числа со знакоммного цифр, которые требуются для точности, вплоть до стандартной ширины экрана, определяемой значением переменной NUMWIDTH команды SET (обычно 10).Если число больше значения SET NUMWIDTH, SQL * Plus округляет число в большую или меньшую сторону до максимально допустимого количества символов, если это возможно, или отображает хэши, если число слишком велико.

Итак, вы видите:

with your_table (x, y) as (
            select -0.0224231886, -0.021470109  from dual
  union all select -0.037164512,  -0.0238026527 from dual
  union all select  0.021786217,   0.044550243  from dual
  union all select  0.0772262609,  0.0724136521 from dual
  union all select  0.968632046,   0.0866250777 from dual
)
select x, y from your_table;

        X,         Y
-.02242319,-.02147011
-.03716451,-.02380265
.021786217,.044550243
.077226261,.072413652
.968632046,.086625078

Вы можете изменить значение по умолчанию для вашего сеанса с помощью `set numf [ormat] ', используя модель формата с достаточным количеством цифр до и после десятичной точкичтобы представить любое число, которое вы могли сохранить, например:

set numformat 990.99999999999

, тогда тот же запрос получает

              X,              Y
  -0.0224231886,  -0.0214701090
  -0.0371645120,  -0.0238026527
   0.0217862170,   0.0445502430
   0.0772262609,   0.0724136521
   0.9686320460,   0.0866250777

Или вы можете неявно изменить его, используя set numw[idth]:

set numf ""
set numwidth 20

                   X,                   Y
        -.0224231886,         -.021470109
         -.037164512,        -.0238026527
          .021786217,          .044550243
         .0772262609,         .0724136521
          .968632046,         .0866250777

, который дает вам необходимую точность, но не показывает ведущий ноль.Если это не имеет значения, тогда этот подход проще.

...