powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / GENERATED BY DEFAULT AS IDENTITY
14 сообщений из 14, страница 1 из 1
GENERATED BY DEFAULT AS IDENTITY
    #32391557
kamuzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть занятная проблема.
ситуация: есть таблица (любая), в которой есть primary key, который, например, задаётся так
id int not null GENERATED BY DEFAULT AS IDENTITY (START WITH -2147483648, INCREMENT BY 1, NO CACHE)
тим переменной роли не играет, самое главное, что есть generated by default as identity
generated always в этой схеме не позволяет делать import вообще, поэтому его не рассматриваем.

делаю ей db2 export ...
хоть в формат del (стопудово), хоть в формат ixf (на 99%)
затем делаю ей db2 import

Например, в этой таблице 1000 записей уже есть и все они подряд, начиная с -2147483648 и далее в сторону увеличения.
В итоге получаю точно такую же таблицу, НО, вставить я не могу ни одной строки, пока id задаю как default. Ошибка выскакивает 1000 раз, пока маркер (или кто там у неё внутри) default не станет -2147482648 и только тогда начинает вставляться новая запись.
Если, например, в этой тысяче есть пропущенное значение, например сотое, то система выдаст 99 ошибок, потом вставит одну строку, а при попытке вставить ещё одну строну будет ругаться ещё 900 раз. то есть до тех пор, пока принимаемое default'ом значение совпадает с id существующих строк.

Как это лечить цивилизованным способом?
Раньше я делал (год назад, когда была необходимость) так: с помощью специального скрипта забивал все дырки в таблице по максимального значения, потом стирал все временные строки и всё начинало вставляться и замечательно работать, но в этом случае есть сильное затруднение, если учесть, что таблица может быть с разного рода unique комбинациями столбцов.
Сейчас снова встала такая необходимость, но старый способ хочу по возможности избежать.
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32391562
kamuzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдогонку
Система: OS/2 ACP2 / eComStation
База: DB/2 v7.2 fixPack 11
Железо роли не играет.
Вообще уверен, что ни система ни база здесь роли не играет, потому что такое наблюдалось на более ранних фиксах.
Здесь возникает вопрос: это документированное поведение базы или это глюк ака фича?
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32391661
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GENERATED реализован через счетчик (1 значение), а не множество занятых. BY DEFAULT позволяет вставлять значения в ручную, но не учитывает их при генерации. Мы разделили на 2 области <0 - автоматом, >0 вручную. В твоем случае надо наверно утилиту писать для выравнивания счетчика с махсимальным введенным значением ключа.
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32391893
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drop table;
create table id int NOT NULL generated by default as identity (start with сколько нужно)
)
import;

может, есть возможность сделать alter table, это нужно доки смотреть.
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32392066
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увы, alter table ... generated ... as identity не навешивается. А с drop - create действительно выкрутиться можно, если на эту таблицу ссылок нет. Но можно drop и их, а после импорта восстановить.
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32392477
Фотография Andron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то или я не понимаю или ... Нельзя разве при импорте (или загрузке в таблицу) сказать что поле с id не загружать? В информиксе например можно сказать load from 'file' insert into table (список полей) и загрузятся только те поля которые указаны, а например поле идентификатора не загружать и его при вставке очередной строки сгенерирует сама СУБД. В DB2 так можно сделать?
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32409759
kamuzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне НУЖНО это поле загружать при импорте, потому что поле id используется в других таблицах.
Нельзя ли этот счётчик увеличить каким-нибудь запросом? Ведь данные о моих таблицах хранятся в служебных таблицах, нет, ли там чего-нибудь такого?
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32409954
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select
ssc.*
from
SYSIBM.SYSSEQUENCES SSS
LEFT JOIN SYSIBM.SYSDEPENDENCIES SSD ON SSD.DNAME = SSS.SEQNAME
AND SSD.DSCHEMA = SSS.SEQSCHEMA
JOIN SYSIBM.SYSCOLUMNS SSC ON SSC.TBNAME = SSD.BNAME
AND SSC.TBCREATOR = SSD.BSCHEMA
AND SSC.GENERATED <> ''

дает все колонки с identity. В SYSIBM.SYSSEQUENCES или SYSIBM.SYSDEPENDENCIES все данные (начальное значение, шаг, ... текущее значение итд) разбирайся сам, но править на прямую система вряд ли даст. А если даже даст - не советую.
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32410857
kamuzon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашёл в SYSIBM.SYSSEQUENCES
START MAXVALUE MINVALUE

Апдейтить не даёт.
Как их заапдейтить?
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32411176
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что тебе еще надо? В системные таблицы DB2 лазить руками не дает. Ты можешь при снятии backup сразу генерить скрипт на DROP - CREATE таблицы с нужным начальным значением поля.
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32413235
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
What about ALTER SEQUENCE???
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32414395
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
AUTOINCREMENT != SEQUENCE imho
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32416134
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kamuzon спрашивал как изменить sequence. Identity как я помню меняется через ALTER TABLE.
...
Рейтинг: 0 / 0
GENERATED BY DEFAULT AS IDENTITY
    #32416185
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
to Nikolay Kulikov

28 янв 04, 21:34 - "есть занятная проблема.
ситуация: есть таблица (любая), в которой есть primary key, который, например, задаётся так
id int not null GENERATED BY DEFAULT AS IDENTITY"

It was not a question about SEQUENCE....
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / GENERATED BY DEFAULT AS IDENTITY
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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