Как изменить DECFLOAT на INT с использованием DB2 SQL? - PullRequest
0 голосов
/ 22 сентября 2018

Проще говоря, я пытаюсь избавиться от всех этих типов DECFLOAT в моей базе данных, так как многие инструменты отчетности (такие как Tableau) не хотят с ними работать.Я новичок в DB2 и нашел много литературы в Интернете для любого типа данных -> DECFLOAT, но ничего существенного в переходе от DECFLOAT -> INT.

Возможно ли это?Любые рекомендации?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Я согласен с @Used_by_Already, что вам лучше всего обновить ваши инструменты BI, чтобы они работали с DECFLOAT, или использовать VIEW s для преобразования в INT или DECIMAL (или даже FLOAT!?) на лету.

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

create table df(df decfloat(16) not null primary key) organize by row;
insert into df values 1.0, 2.00, 3.120;
select * from df;

дает

DF                      
------------------------
                     1.0
                    2.00
                   3.120

  3 record(s) selected.

, затем

alter table df alter column df set data type integer;

возвращает

SQL0478N  The statement failed because one or more dependencies exist on the 
target object.  Target object type: "COLUMN". Name of an object that is 
dependent on the target object: "SQL180924130131030". Type of object that is 
dependent on the target object: "PRIMARY KEY".  SQLSTATE=42893

, поэтому

alter table df drop primary key;
alter table df alter column df set data type integer;

затем

select * from df

дает

DF         
-----------
          1
          2
          3

  3 record(s) selected.

, но

insert into df values 4

дает сбой из-за ожидаемой реорганизации

SQL0668N  Operation not allowed for reason code "7" on table "PAUL.DF".  
SQLSTATE=57016

, поэтому

call admin_cmd('reorg table df');
insert into df values 4;
alter table df add primary key (df);
select * from df;

дает

DF         
-----------
          1
          2
          3
          4

  4 record(s) selected.
0 голосов
/ 22 сентября 2018

Преобразование DECFLOAT в целое число поддерживается в соответствии с Таблица 2. Поддерживаемые преобразования между встроенными типами данных , и фактически вы можете добиться преобразования в любой из этих типов: SMALLINT, INTEGER, BIGINT, DECIMAL, DECFLOAT,REAL, DOUBLE, CHAR, VARCHAR (в зависимости от данных, например, существуют ограничения на размер smallint).

Но почему бы вам изменить столбцы таблицы на целое?Почему бы не DECIMAL вместо этого?Или не изменяйте свои таблицы в соответствии с продуктами BI, вместо этого используйте представления с десятичным числом.Вы также можете контролировать округление представлений.

Хотя у современных инструментов BI могут быть проблемы с этим типом данных, этот тип данных основан на стандарте EEE754r, и в будущих версиях инструментов BI это может стать меньшей проблемой.Возможно, прочитайте DECFLOAT: тип данных будущего перед изменением любых таблиц.

...