подзапрос в таблице изменения в db2 - PullRequest
0 голосов
/ 21 июля 2011

Я хочу запустить подзапрос в команде ALTER TABLE в DB2.

ALTER TABLE user ALTER column userId SET GENERATED ALWAYS AS IDENTITY 
                                                     (start with 2646)

Приведенный выше запрос работает нормально.Но я хочу начать со значения из самого запроса, как показано ниже.

ALTER TABLE user ALTER column userId SET GENERATED ALWAYS AS IDENTITY 
                           (start with (SELECT MAX(userId) FROM user))

Я пытался добиться этого с помощью функций и хранимых процедур.Но проблема в том, что имя таблицы должно быть указано в обоих.Я хочу изменить табличный запрос для почти 40 таблиц.

CREATE FUNCTION findMax (tablename VARCHAR(64), columnname VARCHAR(255))
                          RETURNS INTEGER 
                          RETURN SELECT MAX(columnname)
                                         FROM tablename

1 Ответ

0 голосов
/ 21 июля 2011

Я делал это раньше, используя сценарии sql и делая несколько проходов для базы данных.

Вы можете сделать то же самое, если используете функцию findMax, если у вас есть SQL, подобный этому:

select 'findMax( ' || tabname || ' , ' || colname || ')' 
from syscat.columns where identity = 'Y'

Просто перенаправьте вывод этого sql в текстовый файл, а затем запустите текстовый файл как sql.

Вы также можете сделать это напрямую с помощью ALTER TABLE, но я думаю, что вам потребуется три прохода.

...