#hsqldb
#hsqldb
Вопрос:
Как мне получить текущее значение последовательности в HSQLDB?
Я знаю, что могу получить «следующее значение» с помощью «вызвать следующее значение», но я хочу получить «последнее выданное значение» в принципе, аналогично postgres ‘ last_value
https://dba.stackexchange.com/a/78228/16892
Ответ №1:
За последние 10 лет с момента обсуждения в списке рассылки многое изменилось. Для общего использования теперь есть CURRENT VALUE FOR sequence_name
выражение, которое возвращает последнее значение, используемое в сеансе. Смотрите Руководство по адресу http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_value_expression который имеет приведенный ниже пример:
INSERT INTO MYTABLE(COL1, COL2) VALUES 2, NEXT VALUE FOR MYSEQUENCE;
INSERT INTO CHILDTABLE(COL1, COL2) VALUES 10, CURRENT VALUE FOR MYSEQUENCE;
Комментарии:
1. Хорошо, это работает, спасибо! предостережения: требуется 2.5, с 2.3
user lacks privilege or object not found: CURRENT
илиunexpected token: FOR
. Требуется транзакция. Если вы находитесь в режиме «автоматической фиксации», он возвращает значение null. Если вы просто запрашиваете текущее значение, не используя его сначала (в транзакции), оно возвращает null. Так что в основном то же самое, что и у postgrescurrval
🙂
Ответ №2:
Похоже, это работает:
select (CAST(next_value AS INTEGER) - 1) from information_schema.sequences where sequence_name = upper('<your seq name>')
предполагая, что ваша последовательность увеличивается на 1 и является обычной последовательностью типа INT.
ссылка: http://hsqldb.10974.n7.nabble.com/Current-value-of-a-sequence-td427.html
но, похоже, ошибка «фиксации», на которую они ссылаются, была исправлена (по крайней мере, в версии 2.3.2), насколько вы можете видеть значение, не выполняя фиксацию.
Обратите внимание также, что этот метод «иногда ошибочен» с 2.3.2, но, похоже, работает так, как ожидалось, с версией v2.3.6