powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обнуление генератора
37 сообщений из 37, показаны все 2 страниц
Обнуление генератора
    #38524493
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток!

при попытке вызвать скрипт из IBExpert
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SET TERM ^ ;

EXECUTE block
as
begin
   ........
   if (not exists(SELECT 1 FROM MESSEMTG)) then
   begin
      /* reset generator */
      SELECT gen_id( "GID_MTG", -gen_id( "GID_MTG", 0 ) ) FROM RDB$DATABASE;

      .........
   end
.........

end^

SET TERM ; ^
.......



на строке SELECT gen_id( "GID_MTG", -gen_id( "GID_MTG", 0 ) ) FROM RDB$DATABASE;
вываливает "Token unknown"
Генератор "GID_MTG" в этот момент в базе присутствует, поясните почему?
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524502
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

потому что SELECT должен куда-нибудь возвращать данные. Допиши секцию INTO :temVar;
А вообще обнуление генератора плохая идея.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524505
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SET GENERATOR <name> TO <value>;


Чем нормальный вариант не подходит?
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524519
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Код: sql
1.
SET GENERATOR <name> TO <value>;


Чем нормальный вариант не подходит?
его только при отсутствии записей в таблице надо выполнить
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524520
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

спасибо
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524525
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем, что это DDL, который теоретически внутри PSQL-блока невозможен.
некоторый известный изврат, позволяющий это сделать, они еще не проходили.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524529
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkowadman
Код: sql
1.
SET GENERATOR <name> TO <value>;



Чем нормальный вариант не подходит?
его только при отсутствии записей в таблице надо выполнить
Это проблема?

Код: sql
1.
select first 1 id from sometable into :id


И всё.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524582
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

туплю походу
так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET TERM ^ ;
......
create or alter  procedure reset_gen(gen_name varchar(10))
as
declare variable V_TEMP Integer;
begin
    select GEN_ID(:gen_name, -GEN_ID(:gen_name, 0 ))
    from RDB$DATABASE
    into :V_TEMP;
end^
........


тоже ругается "Token unknown"
заменяю GEN_ID(:gen_name, -GEN_ID(:gen_name, 0 )) на что то другое проходит без проблем.
FireBird 2.5, IBExpert 2013.2.15.1
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524591
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

GEN_ID()
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524608
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

ясен пень тупишь. Имена объектов (будь то таблицы или генераторы) нельзя задавать переменными.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524613
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mMikhail Tchervonenko,

GEN_ID()

на что Вы намекаете? что минус нельзя использовать?
дело в том что конструкчия вида
Код: plsql
1.
.... gen_id( "GID_MTG", -gen_id( "GID_MTG", 0 ) ) ....


в сети многократно приводится ка пример обнуления счетчика.
Если можн поконкретнее в чем причина.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524615
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or alter  procedure reset_gen(gen_name varchar(10))
as
declare variable V_TEMP Integer;
begin
    select GEN_ID(:gen_name, -GEN_ID(:gen_name, 0 ))
    from RDB$DATABASE
    into :V_TEMP;
end^


Какой чудесный огород... Все уже придумано до нас. 15408594
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524616
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoв сети многократно приводится ка пример обнуления счетчика.
Где "в сети"?
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524617
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ага, теперь понятно, спасибо
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524621
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko> на что Вы намекаете? что минус нельзя использовать?

Нет, он намекает на Example.

P.S. Gen_ID - это функция. Которую можно вызывать ВНЕ SQL-операторов.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524632
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

спасибо

я только разбираюсь с FireBird
немного непривычно после MSSQL и MySQL
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524638
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanMikhail Tchervonenkoв сети многократно приводится ка пример обнуления счетчика.
Где "в сети"?

тут и тут
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524643
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

ты лучше скажи на кой тебе генератор обнулять потребовалось?
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524646
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkowadmanпропущено...

Где "в сети"?

тут и тут
По второй ссылке если прекрасный текст и я с ним согласен:
авторThis is more of a dirty little trick to do what you normally cannot and should not do in SPs and triggers: setting generators. They are for getting, not setting values.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524655
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko> я только разбираюсь с FireBird
> немного непривычно после MSSQL и MySQL

Так в TSQL то же самое, как и в PSQL.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524668
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoнемного непривычно после MSSQL и MySQL
И часто ты в MS SQL обнулял IDENTITY?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524678
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамMikhail Tchervonenko> я только разбираюсь с FireBird
> немного непривычно после MSSQL и MySQL

Так в TSQL то же самое, как и в PSQL.


ну насчет генераторов я бы так не сказал
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524683
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMikhail Tchervonenkoнемного непривычно после MSSQL и MySQL
И часто ты в MS SQL обнулял IDENTITY?..

я автоинкрементами вообще не пользовался (за редким исключением) и всегда считал их злом. Здесь просто проект в котором уже они везде задействованы, приходится пользовать.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524689
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати обнуляю я их не в программе а в скрипте который генерирует таблицы.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524692
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoкстати обнуляю я их не в программе а в скрипте который генерирует таблицы.
Почему этот-же скрипт не (пере)создает генераторы для создаваемых таблиц?
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524698
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkoя автоинкрементами вообще не пользовался (за редким
исключением) и всегда считал их злом.
Что, SELECT MAX(id)+1 рулит?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524714
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

почему? Может у него натуральные ключи используются (хотя в MS SQL с триггерами на update будет тяжело) или guid
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524747
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko> кстати обнуляю я их не в программе
Mikhail Tchervonenko> а в скрипте который генерирует таблицы.

В скрипте, который генерирует DDL-ы таблиц или в
DDL-скрипте их создания? Ибо если второе, то как раз
Create/Set Generator - правильное решение, в отличие
от выбранного трюка.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524762
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanMikhail Tchervonenkoкстати обнуляю я их не в программе а в скрипте который генерирует таблицы.
Почему этот-же скрипт не (пере)создает генераторы для создаваемых таблиц?
тут согласно внутренней политике все изменения в базе ведутся через скрипты. Если в базе создаётся блок по смыслу связанных таблиц то до первого релиза программы работающей с этим блоком удобно иметь скрипт который создаёт таблицы (если они не созданы ещё), копирует в них какие то данные и изменяет структуру таблиц в хронологическом порядке. При этом желательно если в процессе тестирования какие то данные добавились в таблицы не удалять их без особой нужды (это к вопросу почему просто не пересоздать генераторы). После выхода первого релиза, под каждый новый релиз, создаётся свой скрипт который вносит уже только изменения в структуру таблиц и если необходимо добавляет новые. Это очень удобно если разработку надо вести и вне пределов фирмы, напр, дома на ноуте. Зачекал скрипт из svn, накатил и получил последний вариант структуры базы. Безусловно иногда и дамп базы накатить приходится но это времязатратно и не всегда необходимо.

А индексы привык использовать либо из комбинации полей, и только если нужна порядковая нумерация автоинкремент. В некоторых случаях удобны GUID подобные индексы, особенно если нужно уникальность поля не только в рамках таблицы но и в рамбках базы или многих баз. К такому GUID удобно привязывать все (логгирование, блокировки итп вещи если они реализовываются не родными средствами сервера баз данных). Автоинкремент плох, с моей точки зрения, дополнительными проблеммами при синхронизации или слиянии данных. Думаю эти проблеммы и без меня всем хорошо известны. Вот собственно и все.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524789
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoАвтоинкремент плох, с моей точки зрения, дополнительными проблеммами при синхронизации или слиянии данных.

у ERP-шников есть правило: первичный ключ (ID-записи) не должен нести НИКАКОЙ информации об объекте в базе.
еще раз: НИКАКОЙ! это просто идентификатор записи.

если нужно уникальное значение, одинаковое для всех баз (например, штрих-код товара), то заводится дополнительный домен в таблице.

а проблемы синхронизации решаются путем дополнительной таблицы, в которой есть домены:
Код: plaintext
1.
2.
3.
4.
5.
ИмяТаблицы
ID-записи
ИдентификаторВнешнейБазы
ИмяТаблицы
ID-записиВоВнейшнейБазе
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524792
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko,

IBExpert прекрасно умеет генерировать скрипт обновления при сравнении как с контрольной БД, так и со скриптом. Так что напрасно вы себя так мучаете.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524826
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMikhail Tchervonenko,

IBExpert прекрасно умеет генерировать скрипт обновления при сравнении как с контрольной БД, так и со скриптом. Так что напрасно вы себя так мучаете.

Тут это отчасти с документированием связано итп Да и не я правила устанавливаю (пока).
Достоинство скрипта в том что он может и с нуля все сделать и интеллектуально по задуманной логике, на мой испорченный взгляд удобно. Конечно не так как это в Visual Studio реализовано (см. проект базы), но хоть что то. Если бы у FireBird было что то что позволяет напрямую хранить структуру базы и скрипты в SVN как это реализовано в продуктах для MSSQL то было бы намного удобнее.

Вообще надо идею подкинуть разработчикам IBExpert сделать интеграцию с svn и git. Было бы удобно.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524835
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOPMikhail TchervonenkoАвтоинкремент плох, с моей точки зрения, дополнительными проблеммами при синхронизации или слиянии данных.

у ERP-шников есть правило: первичный ключ (ID-записи) не должен нести НИКАКОЙ информации об объекте в базе.
еще раз: НИКАКОЙ! это просто идентификатор записи.

если нужно уникальное значение, одинаковое для всех баз (например, штрих-код товара), то заводится дополнительный домен в таблице.

а проблемы синхронизации решаются путем дополнительной таблицы, в которой есть домены:
Код: plaintext
1.
2.
3.
4.
5.
ИмяТаблицы
ID-записи
ИдентификаторВнешнейБазы
ИмяТаблицы
ID-записиВоВнейшнейБазе

Да, примерно так на MsSQL и делали всегда. Единственное в качестве первичного ключа всегда пользовал GUID что позволяло обойтись без вышеописанной таблицы.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524863
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenko Если бы у FireBird было что то что позволяет напрямую хранить структуру базы и скрипты в SVN
isql -x и закидывай в SVN.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524874
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисMikhail Tchervonenko,

IBExpert прекрасно умеет генерировать скрипт обновления при сравнении как с контрольной БД, так и со скриптом. Так что напрасно вы себя так мучаете.
Не назвал бы я такой подход мучением. Вот каждый раз базы сравнивать на предмет, не пропустил ли где-то что-то - вот это мучение. По своему опыту сужу :)

P.S. Особенно классно, если две базы различаются одной процедурой, которая в свою очередь отличается только одним символом (условно "+" на "-" поменяли), а експерт честно создает скрипт, который помимо отличающейся процедуры на много строк включает еще и перекомпиляцию всех зависимостей.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38524893
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvMikhail Tchervonenko Если бы у FireBird было что то что позволяет напрямую хранить структуру базы и скрипты в SVN
isql -x и закидывай в SVN.
Такое тоже используем.
Но только что б потом сравнить что изменили.
...
Рейтинг: 0 / 0
Обнуление генератора
    #38525001
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail Tchervonenkokdv
isql -x и закидывай в SVN.
Такое тоже используем.
Но только что б потом сравнить что изменили.
Ваш tortoisesvn не умеет показывать diff-ы?!?
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обнуление генератора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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