powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Конструкция execute
25 сообщений из 30, страница 1 из 2
Конструкция execute
    #32498103
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрягает меня бльшое количество процедур для генераторов. Сам ими не пользуюсь, но закладываю для других - на всякий случай. Ну если кому-то в будущем приспичит иметь id записи, которая ещё только будет добавлена в таблицу. Короче, таких процедур IBExpert нагенерил кучу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE SP_GEN_TB_BUILDING_ID
RETURNS (
    ID INTEGER)
AS
BEGIN
  ID = GEN_ID(GEN_TB_BUILDING_ID,  1 );  /*TB_BUILDING - таблица для которой создан генератор*/ 
  SUSPEND;
END

Хочу одну процедуру на все генераторы приблизительно так, но раньше с этим совсем не работал. Как правильно не знаю.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE SP$GENERATOR(
    TABLE_NAME VARCHAR( 67 ))
RETURNS (
    ID INTEGER)
AS
begin 

  execute statement 'id = GEN_ID(GEN_' || :table_name || '_ID, 1)';

  suspend;
end

Не выходит. У меня ib7.1 В доках нашёл Execute statement и execute immediate, но не могу заставить работать ни то ни другое. Parsing error! То immediate ему не знакома, то statement не известен.
Как правильно это сделать? Снимите с тормозов.
Раньше я делал через
if(:table_name = 'чему-то') then ...
else if(:table_name = 'тому-то') then ...
но больно много if-фов.
...
Рейтинг: 0 / 0
Конструкция execute
    #32498136
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в какой это доке написано что в IB 7.1 есть execute statement ?
...
Рейтинг: 0 / 0
Конструкция execute
    #32498163
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместе с ним инсталлируются файлы htm и pdf в каталог doc там и нарыл.
...
Рейтинг: 0 / 0
Конструкция execute
    #32498251
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда там наверно написано, как использовать execute statement

P.S. сдается мне, что дока все же от FB 1.5
...
Рейтинг: 0 / 0
Конструкция execute
    #32498287
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB никодга не юзал. Соответственно наследить он на моём компе не мог.
...
Рейтинг: 0 / 0
Конструкция execute
    #32498299
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратись в службу поддержки Борланда. Мож они сделают поддержку EXECUTE STATEMENT в InterBase 8
Нет там такого. Ты скорее всего читал Embedded SQL Guide . Это несколько не то.
...
Рейтинг: 0 / 0
Конструкция execute
    #32498599
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши в программе

Query.SQL.Text:='select gen_id(gen_' +
VarTableName +
'_id) from rdb$database';
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Конструкция execute
    #32498601
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инкремент забыл.
...
Рейтинг: 0 / 0
Конструкция execute
    #32498602
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОпечаткаЮ должно быть:
Код: plaintext
1.
2.
3.
Query.SQL.Text:=
    'select gen_id(gen_' + 
    VarTableName + 
    '_id, 1) from rdb$database';

------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Конструкция execute
    #32498624
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНапиши в программе
Ну уж на фик. Я сам этими процедурами не пользуюсь.
А прямые селекты к таблицам ни одной 'сволочи' делать не позволяю. Только через процедуры. Insert, Update, Delete - сколько угодно, а с Select`ами все на луну.
Ладно, перетерплю как-нибудь эти генераторные процедуры.
...
Рейтинг: 0 / 0
Конструкция execute
    #32498880
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос не в тему.
А почему не используется сквозной генератор, т.е. на все таблицы один?
...
Рейтинг: 0 / 0
Конструкция execute
    #32498903
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело привычки. Мы тут как-то обсуждали такой подход с единым генератором. Где-то летом 2003 на этом форуме. И там и сям есть плюсы и минусы. В общем - дело привычки.
...
Рейтинг: 0 / 0
Конструкция execute
    #32498943
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно. Привычка - вторая натура.
А мы всерьез рассматривали вариант с формированием UID :-)
...
Рейтинг: 0 / 0
Конструкция execute
    #32499136
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже в распределённой базе для репликации в головную использую GUID char(32)
Для ссылочной целестности внутри локальных баз для FK использую генераторы и тип integer.
...
Рейтинг: 0 / 0
Конструкция execute
    #32499167
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А прямые селекты к таблицам ни одной 'сволочи' делать не позволяю. Только через процедуры. Insert, Update, Delete - сколько угодно, а с Select`ами все на луну.

1. А че так? Я вот всякой сволочи все позволяю, (если сможет, оф коурсе - если права есть). Мож, че не понимаю? Поясни, если не жалко...

2. Купи FIB+ - там все прозрачно, и генератор по OnNewRecord они тебе, когда надо, сами запустят, и отрефрешатся по полученному ID после поста и т.п.

... или что не так? Может, жизнь мимо проходит, и все юзеров действительно надо через сторед процедуры к базе допускать?
...
Рейтинг: 0 / 0
Конструкция execute
    #32499686
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZmeisheНу уж на фик. Я сам этими процедурами не пользуюсь.
А прямые селекты к таблицам ни одной 'сволочи' делать не позволяю. Только через процедуры. Insert, Update, Delete - сколько угодно, а с Select`ами все на луну.
Ладно, перетерплю как-нибудь эти генераторные процедуры.
А что за проблема с "прямыми селектами" к таблицам? Создал табличку с одним полем и одной строчкой(если не нравится RDB$DATABASE), права только select.
Или, если уж хочется процедурой в FireBird:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create procedure NEXT_ID (aName varchar( 100 ))
returns (ID bigint)
as
declare variable s varchar( 1024 );
begin
  s = 'select gen_id(' || aName || ', 1) from RDB$DATABASE';
  execute statement s into :ID;
  suspend;
end


------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Конструкция execute
    #32499691
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясняю:
У меня битва не на жизнь, а на смерть. IB+Unix или MS. Каждая 'сволочь' за@бала голословно утверждать, что ib медленнее. Ставят его на на Win нагенерят табличку в 1млн и сравнивают. Ну MS на Unix`e нехочет работать.
Моя задача сравнить в КОМПЛЕКСЕ всё: железо+ ОС платформа + архитектура БД + производительность и на приличном объёме 15-25Гиг, а не в табличке 1млн записей.
Так вот основное звено тормознутости это кривые Select`ы. Процедуры я как Sysdba
1. Вижу
2 Имею возможность анализировать
3. Отлаживать
4. Оптимизировать.
Право select к таблицам только у процедур, у юзеров нет.

Если дать 'сволочам' Select`ы - они зашьют их в свои софтины - хер увидишь, хер исправишь. А потом будут вайдосить - на MS нада была делать. Уроды криворукие.
По поводу
>>Купи FIB+ - там все прозрачно, и генератор по OnNewRecord
я на трёхзвенке - в клиенте генератор по OnNewRecord не поймаю FIB или IBX на сервере приложений работают. Клиент о них ничего не знает.
...
Рейтинг: 0 / 0
Конструкция execute
    #32499694
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня битва не на жизнь, а на смерть. IB+Unix или MS.
жостко.
но думаю у всех сейчас такая же фигня :-)
...
Рейтинг: 0 / 0
Конструкция execute
    #32499698
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZmeisheУ меня битва не на жизнь, а на смерть. IB+Unix или MS.
А только IB или возможно FireBird?
По скорости FB, вероятно, обгонит IB. А уж по дополнениям и кол-вом исправлений ... Тем более ожидается выход FB2.
ZmeisheЕсли дать 'сволочам' Select`ы - они зашьют их в свои софтины - хер увидишь, хер исправишь.
Понятно, так бы сразу и сказал
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Конструкция execute
    #32499901
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли дать 'сволочам' Select`ы - они зашьют их в свои софтины - хер увидишь, хер исправишь. А потом будут вайдосить - на MS нада была делать. Уроды криворукие.

Упс ... Так если они "Уроды криворукие", то кто им мешает на MS криворуко селектить ? Тут ты таким образом только сам себе проблеммы создашь ... Учить надо оптимизировать запросы, а не влоб селекты писать ...

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Конструкция execute
    #32500069
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. А если "уроды" захотят не просто доступ к одной таблице, а Join-ы? У меня, например, достаточно редко Select к одной таблице бывает, чаще - какая-то комбинация. И что, к барину на поклон: "напиши нам еще одну ХП"? Ну, если все умеют только на MS, так и писали бы на MS. Не такая уж она и хреновая. Под Win - ами даже очень быстрая, по крайней мере. Хотя могу поделиться, как написать такие тупые запросы, что и MS "на карачки" встанет, и IB, и Oracle.


2. По поводу трехзвенки - ну, и какая разница, двух-или-пятизвенка, если ты получил ID записи, что мешает тебе ее передать в другое звено вместе со всеми данными, из ХП ты же как-то передаешь?
-------------------------------------------------------------------
Людей учить надо. Если не учатся, то - гнать.


"Кадры решают все". И. Джугашвили.
...
Рейтинг: 0 / 0
Конструкция execute
    #32501077
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dnico Так если они "Уроды криворукие", то кто им мешает на MS криворуко селектить ? Тут ты таким образом только сам себе проблеммы создашь ...

Он же говорит, что "Если дать 'сволочам' Select`ы - они зашьют их в свои софтины - хер увидишь, хер исправишь. А потом будут вайдосить - на MS нада была делать." . Т.е. попробуй потом докажи, что они и на MS тоже криво бы написали..
...
Рейтинг: 0 / 0
Конструкция execute
    #32501153
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, пусть они под MS пишут, а ты вайдось: "надо было под IB/FB делать"!

Все в дерьме, а ты - во фраке.
...
Рейтинг: 0 / 0
Конструкция execute
    #32501801
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mvдостаточно редко Select к одной таблице бывает, чаще - какая-то комбинация. И что, к барину на поклон: "напиши нам еще одну ХП"?
У них есть локальная копия базы - пусть сами создают процедуры, отлаживают, оптимизируют. И только потом "идут на поклон", показывают мне и я вшиваю новую ХП в рабочую базу, возможно ещё и индексы затрагиваю, затем вношу изменения в спецификацию базы - типа документирую. (В общем немного бюрократии бывает очень даже на пользу!!)
...
Рейтинг: 0 / 0
Конструкция execute
    #32501806
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mv2. По поводу трехзвенки - ну, и какая разница, двух-или-пятизвенка, если ты получил ID записи, что мешает тебе ее передать в другое звено вместе со всеми данными, из ХП ты же как-то передаешь?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Вот так и передаю (для каждой таблицы своя "генераторная" процедура):
select id
from SP_GEN_TB_BUILDING_ID

а хотелось бы одну на все таблицы
select id
from SP$GENERATOR(:table_name)

Собственно поэтому и тему открыл.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Конструкция execute
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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