Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выражение преобразования при изменении типа столбца / 3 сообщений из 3, страница 1 из 1
12.04.2016, 15:47
    #39213797
Андрей Васильевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение преобразования при изменении типа столбца
Добрый день!
Народ, подскажите как при смене типа столбца, в выражении преобразования указать всем значениям NULL? В центре управления делаю для 9.7.
...
Рейтинг: 0 / 0
12.04.2016, 18:04
    #39213968
knudsen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение преобразования при изменении типа столбца
Андрей Васильевич,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE TEST_CLMN(
A INTEGER NOT NULL,
B VARCHAR(8) NOT NULL DEFAULT 'ASSD',
PRIMARY KEY(A));

INSERT INTO TEST_CLMN  VALUES(1, 'TEST-1');
INSERT INTO TEST_CLMN (A) VALUES(2);
INSERT INTO TEST_CLMN  VALUES(3, 'TEST-3');
INSERT INTO TEST_CLMN  VALUES(4, 'TEST-4');
INSERT INTO TEST_CLMN  VALUES(5, 'TEST-5');
INSERT INTO TEST_CLMN  VALUES(6, 'TEST-6');

SELECT * FROM TEST_CLMN;

ALTER TABLE TEST_CLMN DROP COLUMN B;
ALTER TABLE TEST_CLMN ADD COLUMN B 
      CHAR(8) DEFAULT NULL;

SELECT * FROM TEST_CLMN;



- годится?
...
Рейтинг: 0 / 0
13.04.2016, 15:21
    #39214754
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выражение преобразования при изменении типа столбца
Маленькое добавление.

Помимо DEFAULT (см. описание SYSCAT.COLUMNS - http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0001038.html ) среди внутренних аттрибутов колонки бывает ещё IMPLICITVALUE (см. там же).

В IMPLICITVALUE записывается заданное DEFAULT значение, которое указано при _добавлении_ столбца.
Сделано это для того, чтобы не перелопачивать существующие записи таблицы после ALTER TABLE ADD COLUMN, добавляя новое поле.
Дальнейшая логика проста - встретили при чтении страницы запись, где значение поля физически отсутствует, забрали его из этого IMPLICITVALUE (NULL для каждой из колонок после CREATE TABLE ...).
Этого второго дополнительного поля не избежать, поскольку DEFAULT может в будущем быть с лёгкостью поменян.

Важное следствие!
Таблицы с разными не-NULL IMPLICITVALUE не могут быть объединены в одну партиционированную таблицу.
О чём там в доке и сказано:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Attaching a data partition is allowed unless IMPLICITVALUE for a specific column is a non-null value 
for both the source column and the target column, and the values do not match. In this case, you must drop 
the source table and then re-create it. A column can have a non-null value in the IMPLICITVALUE field if one of 
the following conditions is met:

* The column is created as the result of an ALTER TABLE...ADD COLUMN statement
* The IMPLICITVALUE field is propagated from a source table during attach
* The IMPLICITVALUE field is inherited from a source table during detach
* The IMPLICITVALUE field is set during database upgrade from Version 8 to Version 9, where it is determined to be 
  an added column, or might be an added column. If the database is not certain whether the column is added or not, 
  it is treated as added. An added column is a column that was created as the result of an ALTER TABLE...ADD COLUMN statement.

To avoid these inconsistencies during non-migration scenarios, it is recommended that you always create the tables 
that you are going to attach with all the columns already defined. That is, never use the ALTER TABLE statement to add 
columns to a table before attaching it.

Т.е. для таблиц, уже связанных с партиционированием, или для которых оно может потребоваться в будущем изменение структуры надо проводить с определённой аккуратностью.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выражение преобразования при изменении типа столбца / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]