Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Тащим инфу Identity Column / 10 сообщений из 10, страница 1 из 1
26.11.2008, 00:08
    #35675310
Тащим инфу Identity Column
Добрый день!
Мне нужно вытащить информацию, о колонке в таблице, что identity, точнее, какое следующие будет значение. В системных таблицах есть, все, окромя, вышесказаного. Я, конечно, понимаю, что можно сделать select max или select min (в зависимости от increment'a), но это не круто, если identity цикличный, то возможность ошибки очень высока. Вот такая штука identity_val_local() - тоже не особо катит. Это корректно срабатывает, только тогда, когда делается единичный insert.

Есть предположения, или решения моего вопроса?

Знаю, вопрос не ахти, но очень надо.
...
Рейтинг: 0 / 0
26.11.2008, 10:36
    #35675739
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
Добрый день.

А для чего именно вам это надо?
Опишите схематично, что вы хотите сделать.
...
Рейтинг: 0 / 0
26.11.2008, 11:40
    #35675982
I_love_MSDN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
//Экспортируем данные
EXPORT TO
  '%DATA_PATH%\DM_IDENT_NO_LOB1.ixf'
  OF IXF 
  SELECT * FROM "DM"."IDENT_NO_LOB";

//Кидаём таблицу, в таблице есть ident колонка, мы её запомним, для alterа в конце
DROP TABLE "DM"."IDENT_NO_LOB";
//Создаём таблицу, такую же, но без указаний, об ident колонки
CREATE TABLE "DM"."IDENT_NO_LOB" (
  "ID"	INTEGER,
  "ABC"	CHARACTER( 1 )
) 
  IN "ADAMSPACE"
  DISTRIBUTE BY HASH ( "ID" ) ;
//Доп. альтер
ALTER TABLE "DM"."IDENT_NO_LOB"
  DATA CAPTURE NONE
  LOCKSIZE ROW
  APPEND OFF
  NOT VOLATILE;


COMMIT;
//Грузим данные обратно
LOAD CLIENT FROM '%DATA_PATH%\DM_IDENT_NO_LOB1.del'
  OF DEL 
  MODIFIED BY
    IDENTITYOVERRIDE
  INSERT INTO DM.IDENT_NO_LOB(
    ID,
    ABC
    )
 INDEXING MODE REBUILD 
 ALLOW NO ACCESS ;
//Делаем alter на ту, колонку, что была ident. С новым значением START WITH <-- для этого и нужно
ALTER TABLE  "DM"."IDENT_NO_LOB"
ALTER "ID" SET 	GENERATED ALWAYS
    AS IDENTITY (START WITH  20 , INCREMENT BY  1 , NO CACHE,
       MINVALUE  0 , NO MAXVALUE, NO CYCLE, NO ORDER);

//Собираем статистику.
RUNSTATS ON TABLE "DM"."IDENT_NO_LOB"
  AND INDEXES ALL
  ALLOW READ ACCESS;

COMMIT;


По сути нужно для восстановления значения при изменение таблицы, когда её обязательно нужно дропнуть (и не обязательно, когда используется утилиты ипорта/лоада, например, когда используются темповые таблицы). И task содержит обязательно, делать сначала без идент, а потом делать альтер с новым значением START WITH
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
26.11.2008, 12:00
    #35676063
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
Я правильно понял, что перед drop вы хотите взять следующий номер identity?
...
Рейтинг: 0 / 0
26.11.2008, 12:59
    #35676292
I_love_MSDN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
Mark BarinsteinЯ правильно понял, что перед drop вы хотите взять следующий номер identity?
Да, верно. Абсолютно точно.
...
Рейтинг: 0 / 0
26.11.2008, 13:16
    #35676361
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
I_love_MSDNMark BarinsteinЯ правильно понял, что перед drop вы хотите взять следующий номер identity?
Да, верно. Абсолютно точно.Ну так сделайте перед drop при выключенном автокоммите что-то типа:
Код: plaintext
1.
select id from new table(insert into dm.ident_no_lob(abc) values ('')) t;
rollback;
?
...
Рейтинг: 0 / 0
26.11.2008, 13:19
    #35676377
I_love_MSDN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
Спасибо! Хорошая информация.
А системно (в таблицах) нигде не указывается?
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
26.11.2008, 13:56
    #35676559
I_love_MSDN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
Не ролбэчит. А нужно, что бы пользователь не потерял значение. =(
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
26.11.2008, 14:06
    #35676611
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
I_love_MSDNНе ролбэчит. А нужно, что бы пользователь не потерял значение. =(
- Абсолют' ный
-посковый робот по MSDN для
- ленивых Значение identity и не должно откатываться.
Rollback - для отката вставки и связанной с ним возможной логики.
Для no cache можно еще:
Код: plaintext
1.
2.
3.
4.
5.
select s.LASTASSIGNEDVAL
from sysibm.syscolumns as c, sysibm.sysdependencies as d, sysibm.syssequences as s  
where c.tbcreator = d.dschema and c.tbname = d.dname 
and d.bname = s.seqname and d.bschema = s.seqschema 
and c.identity = 'Y' and d.dtype = 'T' and d.btype =  'Q' and s.seqtype = 'I' 
and C.name='ID' and C.tbname='IDENT_NO_LOB' and C.tbcreator='DM'
...
Рейтинг: 0 / 0
26.11.2008, 14:54
    #35676789
I_love_MSDN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тащим инфу Identity Column
Mark Barinstein,

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


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