Как найти следующее сгенерированное значение для столбца автоприращения?

Apache встроили ту функциональность; просто увеличьтесь уровень журнала к trace7 или trace8:

LogLevel trace8

Примечание, которое это выведет партия из данных. Вас предупредили.

6
задан 5 June 2009 в 13:11
4 ответа

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

К сожалению, нет никакого способа указать следующее значение автоматически. Согласно документации DB2 значение должно быть 'числовой константой'. Следовательно я должен был сделать выбор, макс. (идентификатор), получить значение и заменить его в изменении.. перезапустите stmt вручную.

Я не помню, попробовал ли я это - но можно записать SP, где макс. (идентификатор) установлен в переменной, и присвойтесь, переменная в изменении... перезапускают stmt. (Я не могу попробовать, поскольку у меня нет доступа ни к какой db2 базе данных больше). Я сомневаюсь, что это будет работать все же. (Если это работает, действительно сообщают мне :))

Ссылка DB2:

ПЕРЕЗАПУСК или ПЕРЕЗАПУСК С числовым постоянным

Сбрасывает состояние последовательности, связанной со столбцом идентификационных данных. Если С числовым постоянным не указан, последовательность для столбца идентификационных данных перезапущена в значении, которое было указано, или неявно или явно, как начальное значение, когда столбец идентификационных данных был первоначально создан. Столбец должен существовать в указанной таблице (SQLSTATE 42703) и должен уже быть определен с атрибутом ИДЕНТИФИКАЦИОННЫХ ДАННЫХ (SQLSTATE 42837). ПЕРЕЗАПУСК не изменяет исходный ЗАПУСК СО значением.

Числовой постоянной является точная числовая константа, которая может быть любой положительной или отрицательной величиной, которая могла быть присвоена этому столбцу (SQLSTATE 42815) без ненулевых цифр, существующих направо от десятичной точки (SQLSTATE 428FA). Числовое постоянное будет использоваться в качестве следующего значения для столбца.

4
ответ дан 3 December 2019 в 00:27
  • 1
    That' s хороший ответ, спасибо. Но это только говорит мне, нет никакого способа записать отдельного оператора для перезапуска счетчика. Вы знаете, существует ли некоторый волшебный переключатель для " db2 import" - команда, которая может решить это? И, есть ли способ найти все таблицы, которые имеют эту проблему (счетчик ниже, чем существующий идентификатор)? –  Tim Büthe 15 June 2009 в 14:09
  1. почему Вы даже думали бы об использовании автоинкремента при импорте данных для того столбца вручную? это автоприращение не используется вообще,
  2. В подобном приложении здесь я имею, записал, что SP - a. называет admin_cmd - опция b. загрузки выбирает макс. (идентификатор) - и загружает их наряду с текущей меткой времени к запросу таблицы Just журнала таблица журнала и обновление с помощью сценария удара/окон. Простой....
0
ответ дан 3 December 2019 в 00:27
  • 1
    Я импортирую данные первоначально, но после этой фазы, я хочу, чтобы мое программное обеспечение смогло вставить записи и иметь некоторые столбцы, автоматически заполненные. –  Tim Büthe 15 December 2009 в 13:15

Ваша проблема, возможно, уже решена, но для всех остальных с такой же проблемой: я могу предложить решение для получения max_id +1 для всех таблиц. Единственное ограничение - исходный столбец должен быть столбцом с автоинкрементом (GENERATED = 'D'). Набор результатов может быть выполнен с помощью clp или других инструментов запросов.

SELECT   'alter table ' || rtrim(TABSCHEMA) || '.' || TABNAME || ' alter column ' || COLNAME || ' restart with ' || 
cast((case when (trim ((replace ( HIGH2KEY, '+' , '' )))) = '' then 0 else integer(trim ((replace ( HIGH2KEY, '+' , '' ))))+2 end) as varchar(20)) 
|| ' ;'
FROM     SYSCAT.COLUMNS
WHERE    GENERATED = 'D'
1
ответ дан 3 December 2019 в 00:27

Разве вы не можете использовать порядковый номер в DB2, тогда используйте последовательность. nextval ()?

Ссылка на автоматическое создание значений последовательности в DB2: http://www.ibm.com/developerworks/data/library/techarticle/0302fielding/0302fielding.html

2
ответ дан 3 December 2019 в 00:27

Теги

Похожие вопросы