powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Generated by...
9 сообщений из 9, страница 1 из 1
Generated by...
    #35111978
датф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!
Есть такой вопрос по БД DB2 8.2 для LUW.
Создана таблица с полем ID для которого GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE)
Получается, что я могу инсертить значения в ID или принудительно или по умолчанию туда будут вставляться значения генерируемы +1. Возникла такая проблема...вручную был внесен ID = 18 и когда попытка внести значение по умолчанию DB2 поругался сказав, что
...from having duplicate rows for those columns
Я так понял, что не смог внести значение потому что такое значение уже есть. Можно ли как нить в будущем избежать таких ситуаций? Поможет ли если я увеличу значение CACHE до 10 или 20?

PS:
вот полная ошибка:

DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0803N One or more values in the INSERT statement, UPDATE statement, or
foreign key update caused by a DELETE statement are not valid because the
primary key, unique constraint or unique index identified by "1" constrains
table "DB2ADMIN.TEST" from having duplicate rows for those columns.
SQLSTATE=23505
...
Рейтинг: 0 / 0
Generated by...
    #35112472
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласно объявлению область генерируемых значений начинается с 1 (START WITH 1) в сторону увеличения.
Решение
- вставляй только отрицательные ID
- вставляй в "дыры", которые найдешь в интервале 1 - max(ID)
...
Рейтинг: 0 / 0
Generated by...
    #35112651
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
датфВозникла такая проблема...вручную был внесен ID = 18 и когда попытка внести значение по умолчанию DB2 поругался сказав, что
...from having duplicate rows for those columns
Я так понял, что не смог внести значение потому что такое значение уже есть.DB2 гарантирует, что для generated поля она САМА будет генерировать уникальные значения.
На ваши команды изменения этого поля она не обращает внимания.
При этом автоматически никаких уникальных ограничений на это поле не создается.
Значение вы не смогли внести, т.к. вы сами на это поле сделали уникальное ограничение.
датфМожно ли как нить в будущем избежать таких ситуаций? Поможет ли если я увеличу значение CACHE до 10 или 20?CACHE здесь ни при чем.
Избежать ошибки вы можете:
- сняв уникальное ограничение
- сделав alter table TTT alter ID restart with 19
...
Рейтинг: 0 / 0
Generated by...
    #35112951
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-моему тут нужно просто еще раз попытаться ввести значение по умолчанию.
т.е. повторить statement который привел к ошибке. след. значение кот db2 сгенерит будет 19

к сожалению проверить не на чем.
...
Рейтинг: 0 / 0
Generated by...
    #35116532
dmatsynin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinДобрый день.
DB2 гарантирует, что для generated поля она САМА будет генерировать уникальные значения.
На ваши команды изменения этого поля она не обращает внимания.
При этом автоматически никаких уникальных ограничений на это поле не создается.
Значение вы не смогли внести, т.к. вы сами на это поле сделали уникальное ограничение.
А разве это не когда стоит GENERATED ALWAYS?
...
Рейтинг: 0 / 0
Generated by...
    #35116802
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmatsyninА разве это не когда стоит GENERATED ALWAYS?Что именно?
Генерация уникальных значений, если значение не указано явно?
Это в любом случае.
Разница между always и by default только в том, что при by default можно и самому в это поле писАть.
...
Рейтинг: 0 / 0
Generated by...
    #35135747
dealko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
db2 не гарантирует уникальность полей generated by default если такие поля заполнялись "вручную".
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
db2 => create table test (ID bigint GENERATED BY DEFAULT AS IDENTITY (START WITH
  1 , INCREMENT BY  1 , NO CACHE), a varchar( 10 ))
DB20000I  Команда SQL выполнена успешно.
db2 => insert into test (a) values ('1')
DB20000I  Команда SQL выполнена успешно.
db2 => insert into test (id,a) values ( 2 ,'2')
DB20000I  Команда SQL выполнена успешно.
db2 => insert into test (a) values ('3')
DB20000I  Команда SQL выполнена успешно.
db2 => select id from test

ID
--------------------
                    1 
                    2 
                    2 

   3  записей выбрано.
Если "ручное" заполнение ну прямо очень нужно то как и говорил Марк поможет:
Код: plaintext
alter table test alter ID restart with ...
...
Рейтинг: 0 / 0
Generated by...
    #35135820
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dealkodb2 не гарантирует уникальность полей generated by default если такие поля заполнялись "вручную".То же и для generated always:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table test(i int generated always as identity);
insert into test values (default);
alter table test alter i restart with  1 ;
insert into test values (default);
select * from test;

I          
-----------
           1 
           1 

   2  record(s) selected.
...
Рейтинг: 0 / 0
Generated by...
    #35135847
dealko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Однако....
Получается после IMPORT or LOAD надо alter table делать
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Generated by...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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