Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Generated by... / 9 сообщений из 9, страница 1 из 1
05.02.2008, 19:51
    #35111978
датф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
Доброе время суток!
Есть такой вопрос по БД 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
06.02.2008, 09:05
    #35112472
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
Согласно объявлению область генерируемых значений начинается с 1 (START WITH 1) в сторону увеличения.
Решение
- вставляй только отрицательные ID
- вставляй в "дыры", которые найдешь в интервале 1 - max(ID)
...
Рейтинг: 0 / 0
06.02.2008, 10:06
    #35112651
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
Добрый день.
датфВозникла такая проблема...вручную был внесен 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
06.02.2008, 11:16
    #35112951
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
по-моему тут нужно просто еще раз попытаться ввести значение по умолчанию.
т.е. повторить statement который привел к ошибке. след. значение кот db2 сгенерит будет 19

к сожалению проверить не на чем.
...
Рейтинг: 0 / 0
07.02.2008, 12:28
    #35116532
dmatsynin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
Mark BarinsteinДобрый день.
DB2 гарантирует, что для generated поля она САМА будет генерировать уникальные значения.
На ваши команды изменения этого поля она не обращает внимания.
При этом автоматически никаких уникальных ограничений на это поле не создается.
Значение вы не смогли внести, т.к. вы сами на это поле сделали уникальное ограничение.
А разве это не когда стоит GENERATED ALWAYS?
...
Рейтинг: 0 / 0
07.02.2008, 13:28
    #35116802
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
dmatsyninА разве это не когда стоит GENERATED ALWAYS?Что именно?
Генерация уникальных значений, если значение не указано явно?
Это в любом случае.
Разница между always и by default только в том, что при by default можно и самому в это поле писАть.
...
Рейтинг: 0 / 0
15.02.2008, 16:31
    #35135747
dealko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
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
15.02.2008, 16:58
    #35135820
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
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
15.02.2008, 17:08
    #35135847
dealko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generated by...
Однако....
Получается после IMPORT or LOAD надо alter table делать
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Generated by... / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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