Учитывая эту таблицу,Oracle номер точность и масштаб как нуль, когда случай используется в ЗЕЬЕСТ
CREATE TABLE test (
c01 INT,
c02 NUMBER(10,5),
c03 NUMBER(18,10)
);
Я использую OCCI (библиотека C++), чтобы выполнить следующий запрос на выборку:
select case(c01) when 10 then c02 else c03 end from test;
В этом случае тип typecode, который я получаю, равен OCCI_SQLT_NUM
, но точность и масштаб равны 0
. Что это значит (0
точность и масштаб)? Это ошибка?
Не зная точность/масштаб, безопасность типов, семантику и правильность программы на костре, как это не представляется возможным, чтобы решить, следует ли рассматривать его как целое или с плавающей точкой.
Иными словами, что такое выражение CASE(x) WHEN y THEN a ELSE b
? Can a
be INT
и b
be CHAR[32]
? Я думаю нет. Итак, как вычисляется тип?
[«НОМЕР» и «НОМЕР (*, 0)» то же самое в Oracle?] (Http://stackoverflow.com/questions/28207708/is-number-and-number-0-the-same- в-оракула). Может быть, полезно. – badola
@badola: Нет. Этот случай отличается. – Nawaz
Хм, возможно, он должен представлять 'NUMBER' без масштаба и точности, явно заданных? Попробуйте создать функцию, которая возвращает 'number', вернуть 1, выбрать ее из двойника и посмотреть, получите ли вы тот же тип. Что касается вашего вопроса 'case', см. Http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm, в котором говорится, что все' return_expr 'должны иметь одинаковый тип данных или все быть числовыми; в противном случае вы получите ora-00932 (несоответствие типов данных). Также возможно, что 'else NULL' вмешивается в результирующий тип данных case. – Timekiller