Код ORACLE Pro*C/C++ не округляет результаты

У меня есть таблица базы данных с именем My_table со столбцом с именем timestamps, который содержит следующие данные.

12-May-19
12-Jun-09
12-Apr-08

Когда я конвертирую эту временную метку с 1970 года, используя этот SQL-запрос:

SELECT (timestamps - to-date(197001010000, 'yyyymmddhhss)×864) from My_table;

Он возвращает округленное целое число, например 1459600, как и ожидалось на терминале ORACLE SQLPLUS. Однако, если я выполняю тот же запрос в динамическом коде ORACLE Pro * C/C++, который правильно устанавливает тип данных как целое число (selectda-T (i) = 2), он не округляет результаты, а только усекает результаты .

Как я могу заставить его вести себя точно так же, как на терминале ORACLE SQLPLUS?


person Ganiel24    schedule 31.01.2019    source источник


Ответы (1)


Да, если вы проверите спецификацию, Оракул говорит

INTEGER ... При выводе, если значение столбца является действительным числом, Oracle усекает любую дробную часть.

Поэтому, если вы хотите, чтобы ваше целое округлялось, вы должны сделать это самостоятельно в SQL, например.

SELECT round(timestamps - to-date(197001010000, 'yyyymmddhhss')×864) from My_table;
person kfinity    schedule 31.01.2019
comment
Пожалуйста, это усечение ORACLE происходит только при выполнении кода pro*c/c++? Потому что на терминале SQLPLUS он округляет его до ближайшего целого числа. - person Ganiel24; 01.02.2019
comment
Да, это прекомпилятор ProC усекает целое число. В SQLPlus форматирование чисел по умолчанию можно настроить с помощью SET NUMFORMAT, но в ProC я не думаю, что его можно изменить. - person kfinity; 01.02.2019
comment
Большое спасибо за объяснение, очень признателен. - person Ganiel24; 01.02.2019