powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Передача имени таблицы как параметр
14 сообщений из 14, страница 1 из 1
Передача имени таблицы как параметр
    #32523920
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте уважаемые гуру!
Обращаюсь к вам и вашему опыту! Подскажите, пожалуйста, как в хранимой процедуре осуществить передачу имени таблицы, имя генератора, имя другой хранимой процедуры как параметра.

Ниже привожу хранимую процедуру, в уоторой необходимо подставить имя генератора. У меня не проходит синтаксис :(


CREATE PROCEDURE GET_NEW_CODID (
NAME_TABLE VARCHAR(20),
NAME_FIELD VARCHAR(20),
NAME_GEN VARCHAR(50))
RETURNS (
NEW_CODID SMALLINT)
AS
begin
execute procedure get_free_id (:NAME_TABLE,:NAME_FIELD')
returning_values :new_codid;
if (new_codid is null) then new_codid=GEN_ID( :NAME_GEN , 1) ;
suspend;
end


а вот еще не решенная мною ситуация

ALTER PROCEDURE GET_FREE_ID (
PNAMETABLE VARCHAR(30),
PNAMETABLEFREE VARCHAR(30),
PNAMEFIELD VARCHAR(30))
RETURNS (
COD_ID SMALLINT)
AS
begin
cod_id = null;
for
select CODID
from :PNAMETABLEFREE
where NAME_TABLE = :pNameTable
and NAME_FIELD = :pNameField
into : cod_id
do
begin
delete from :PNAMETABLEFREE
where CODID=:cod_id
and NAME_TABLE=:pNameTable
and NAME_FIELD=:pNameField;
suspend;
end
end
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32523927
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mv , я молчу. Хоть это и нелегко...
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32523928
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Нельзя.
2. Динамические запросы (только для FireBird)
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524103
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для SQL сервера такая возможность есть !!

Пример

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE dbo.mysample
(
@tabname varchar( 50 ),
@somevalue char( 50 )
)
AS
declare @sql varchar( 400 )

set @sql='DELETE FROM '+ @tabname + ' where somefield='+ CHAR( 39 ) + @somevalue + CHAR( 39 )
exec(@sql)

а как реализовать это для FireBird !!!
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524118
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя FireBird 1.5, то скачай ReleaseNotes .
Многие вопросы отпадут сразу.
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524149
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня FireBird 1.0 !
Ок! Установлю 1.5 и попробую разобраться...
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524160
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а как решить эту проблему оптимально окольными путями, на FireBird 1.0 (не оптимальный я знаю, необходимо написать 40 процедур для каждой из таблиц )
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524171
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедура в данном случае вообще нафиг не нужна.
Твои траблы в том, что ты уже заранее загнал себя в рамки выбранного решения (неверно выбранного), а теперь мужественно воюешь сам с собой и сервером.
С другой стороны подойти не пробовал?
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524175
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бэкап -> (
Firebird 1.0 -> FireBird 1.5) -> Restore -> Делаем, например, так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE DynamicSampleTwo (TableName VARCHAR( 100 ))
AS
DECLARE VARIABLE Par INT;
BEGIN
  EXECUTE STATEMENT ’SELECT MAX(CheckField) FROM ’ || TableName INTO :Par;
    IF (Par >  100 ) THEN
  EXCEPTION Ex_Overflow ’Overflow in ’ || TableName;
END
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524268
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Процедура в данном случае вообще нафиг не нужна.
Твои траблы в том, что ты уже заранее загнал себя в рамки выбранного решения (неверно выбранного), а теперь мужественно воюешь сам с собой и сервером.
С другой стороны подойти не пробовал?

Может и так, зациклился я на одном месте с этой проблемой. Стремился перенести максимально всю бизнес-логику на сервер... Последняя проблемка с которой я столкнулся, это при Inserte необходимо вернуть код записи, а код этот формируется автоматически, тригером. Вот я и пытаюсь написать хранимую процедуру, которая возвращала бы прогнозируемый код записи для указаной таблицы.
Хотел это перенести на клиентскую часть, но не знаю, как управлять генератором. Может подсажете? :)
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524277
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 IgorD
а триггер как генератором управляет? так и в ХП им управлять...
я так понял, что примерно так это будет выглядеть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE PROCEDURE KATCITY_INS_UPD (
    PRIZN VARCHAR( 20 ),
    Q1 DATE,
    Q2 CHAR( 8 ),
    Q3 VARCHAR( 21 ),
    Q4 CHAR( 10 ),
    P_NREC INTEGER,
    P_NAME VARCHAR( 30 ),
    P_TELEF VARCHAR( 20 ))
RETURNS (
    E_NREC INTEGER)
AS
begin
  if (:PRIZN = 'izm') then
  begin
    update katcity set name=:p_name,telef=:p_telef where nrec=:p_nrec and nrec<> 0 ;
    E_NREC = :P_nrec;
  end
  else
  begin
    E_NREC = gen_id(katcity_gen, 1 );
    insert into katcity (LASTDATE,LASTTIME,LASTUSER,LASTOFIC,NREC,NAME,TELEF) values (:Q1,:Q2,:Q3,:Q4,:E_NREC,:P_name,:P_TELEF);
  end
  suspend;
end
али я не прав, это надо было?..
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524281
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А то!
Конечно подскажем.
Читай тут .
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524288
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух, на граблях уже мозоли, похоже.

1. Формируем Id записи ДО ее поста с пом. генераторов.

2. Юзаем для этого, например, IBX, или, личше FIBPlus.

3. Если BDE - то компонент Query, подсказка:

Код: plaintext
1.
2.
     Result := 'SELECT GEN_ID(' + GeneratorName +
      ',1) FROM  RDB$DATABASE';
...
Рейтинг: 0 / 0
Передача имени таблицы как параметр
    #32524342
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПАСИБО ВСЕМ ЗА ПОМОЩ!!! ПРОЯСНИЛ ДЛЯ СЕБЯ!!!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Передача имени таблицы как параметр
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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