powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Командный файл (или ХП) для сбрасывания identity
4 сообщений из 4, страница 1 из 1
Командный файл (или ХП) для сбрасывания identity
    #38200846
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

Срочно потребовалось создать командный файл под Windows и DB2 WSE 9.7, либо просто ХП, выполняющие следующее:

1. получал на вход в качестве параметра имя БД, имя таблицы
2. вычислил max(TAB_ID), то есть максимум по полю generated always as identity
3. выполнил ALTER TABLE [имя таблицы] ALTER COLUMN TAB_ID RESTART WITH max(TAB_ID)+1

Очень срочно нужно. Заранее благодарен

С уважением, Семен Попов
...
Рейтинг: 0 / 0
Командный файл (или ХП) для сбрасывания identity
    #38202550
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Semen Popov,

Здравствуйте.
Как-то так
Код: sql
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.
create procedure restart_identity (
  p_tabschema varchar(128)
, p_tabname   varchar(128)
, out p_rc int
, out p_msg varchar(128)
, out p_stmt varchar(1024)
)
begin
 declare SQLCODE int default 0;
 declare l_max decfloat;
 declare l_colname varchar(128);
 declare c1 cursor for s1;
 declare exit handler for sqlexception
 begin
   GET DIAGNOSTICS EXCEPTION 1 p_msg = MESSAGE_TEXT;
   SET p_rc=SQLCODE;
 end;

 set p_rc=0;
 select 
   'select max(' || colname || ') + 1 from ' || p_tabschema || '.' || p_tabname 
 , colname
 into p_stmt, l_colname
 from syscat.columns
 where identity='Y'
 and tabschema = p_tabschema and tabname = p_tabname;
 
 if (sqlcode = 100) then
   set p_rc = -1, p_msg = 'No such table (' || p_tabschema || '.' || p_tabname || ') or no identity column';
   return;
 end if;

 prepare s1 from p_stmt;
 open c1;
 fetch c1 into l_max;
 close c1;

 set p_stmt = 'alter table '||p_tabschema||'.'||p_tabname||' alter '||l_colname||' restart with '||char(l_max);
 execute immediate p_stmt;
end@

call restart_identity('MYSCHEMA', 'MYTABLE', ?, ?, ?)@

...
Рейтинг: 0 / 0
Командный файл (или ХП) для сбрасывания identity
    #38202818
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein, спасибо. Приму на вооружение. А сам вчера сваял командный файл (см. вложение). Правда, ваш вариант более универсален
...
Рейтинг: 0 / 0
Командный файл (или ХП) для сбрасывания identity
    #38202829
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл про вызов сказать:

db2cmd /c /w AlterIdentity.bat [WORKDIR] [DBNAME] [SCHEMA.TABNAME] [FLDNAM] [USER] [PWD]
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Командный файл (или ХП) для сбрасывания identity
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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