Форум: "Базы";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
ВнизДоступ к значению генератора Найти похожие ветки
← →
Jaxtor (2003-03-06 15:20) [0]Есть ли возможность доступа из приложения-клиента к значению генератора в InterBase 6.0?
← →
Val (2003-03-06 15:27) [1]да. как минимум, можно посмотреть текущее значение из системной таблицы:
select distinct gen_id(CUST_NO_GEN, 0) from RDB$GENERATORS;
← →
Johnmen (2003-03-06 15:30) [2]>Val © (06.03.03 15:27)
Нет, это не смотрение системной таблицы :)
select gen_id(CUST_NO_GEN, 0) from <любая таблица, имеющая одну запись> (напр. rdb$database)
← →
Jaxtor (2003-03-06 15:30) [3]Ясненько, нужно мне углубленно читать документацию по INTERBASE...
← →
Val (2003-03-06 15:53) [4]>Johnmen © (06.03.03 15:30)
м.б. пример не мой, из доки под рукой взял, признаюсь честно :)
← →
Жук (2003-03-06 15:59) [5]select gen_id(<имя генератора>,1) from rdb$database - получить следующее значение.
← →
Johnmen (2003-03-06 16:04) [6]>Жук © (06.03.03 15:59)
Нет, не следующее, а большее текущего на 1.
;)))))))))))))))))
← →
Жук (2003-03-06 16:06) [7]2 Johnmen © (06.03.03 16:04)
Если ЭТО - не следующее, то какое ?
2 Jaxtor © (06.03.03 15:20)
>Есть ли возможность доступа из приложения-клиента к значению >генератора в InterBase 6.0?
Есть ! :-)
← →
Val (2003-03-06 16:06) [8]>Johnmen © (06.03.03 15:30)
.. from <любая таблица, имеющая одну запись>..
проверил - RDB$GENERATORS имеет не одну запись.
← →
Val (2003-03-06 16:08) [9]>Жук © (06.03.03 16:06)
у генераторов могут быть разные приращения, не обязательно 1.
← →
Johnmen (2003-03-06 16:23) [10]>Val © (06.03.03 16:06)
Поэтому и distinct... И для наращивания не годится...:)
Лично я (что уже неоднократно в конфе приводил) сделал бы через ХП :
CREATE PROCEDURE CurrentValueOfMyGen RETURNS (currentvalue INT)
AS BEGIN
currentvalue=GEN_ID(MyGen,0);
END
Развязываемся от к.-л.таблиц...
← →
Val (2003-03-06 16:26) [11]>Johnmen © (06.03.03 16:23)
согласен
← →
Sergey Masloff (2003-03-06 16:29) [12]Val © (06.03.03 16:06)
>.. from <любая таблица, имеющая одну запись>..
>проверил - RDB$GENERATORS имеет не одну запись.
Ну и получишь столько дерганий функции сколько записей в таблице.
hint таблица rdb$database ВСЕГДА имеет 1 запись.
← →
Val (2003-03-06 16:35) [13]>Sergey Masloff (06.03.03 16:29)
уже разобрались :)
← →
Sergey Masloff (2003-03-06 16:56) [14]Val ©
>уже разобрались :)
я в запарке невнимательно посмотрел на ответы.
← →
zacho (2003-03-06 18:20) [15]А что бы не вводить в заблуждение новичков, стоило бы еще добавить, что для генерации первичного ключа использовать GEN_ID(MY_GEN,0) не стоит. Как минимум GEN_ID(MY_GEN, 1) :-)
Кстати, меня всегда интеросовало, а для каких реальных целей может потребоваться текущее значение генератора ?
← →
Johnmen (2003-03-06 21:34) [16]>zacho © (06.03.03 18:20)
Если пофантазировать, то, например, хранить в генераторе некоторый изменяемый настроечный параметр...
← →
Desdechado (2003-03-10 16:37) [17]вообще-то можно генератор выставить в MAXINT, а потом декрементировать GEN_ID(MY_GEN,-1)
это ж первичный ключ будет, его величина никого не интересует.
можно попробовать (сам не делал) и отрицательные значения этой функцией получать :)
← →
Desdechado (2003-03-11 10:52) [18]2 Johnmen © (06.03.03 21:34)
настройки лучше все-таки в спецтаблице хранить, т.к. права на генератор не раздаются, а глобальные настройки требуют некоторых привилегий :)
← →
Johnmen (2003-03-11 11:03) [19]>Desdechado © (11.03.03 10:52)
Никто не спорит ! А фантазирует...:)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c