Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Передача имени таблицы как параметр / 14 сообщений из 14, страница 1 из 1
19.05.2004, 13:49:56
    #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
19.05.2004, 13:52:55
    #32523927
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
mv , я молчу. Хоть это и нелегко...
...
Рейтинг: 0 / 0
19.05.2004, 13:53:40
    #32523928
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
1. Нельзя.
2. Динамические запросы (только для FireBird)
...
Рейтинг: 0 / 0
19.05.2004, 14:58:25
    #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
19.05.2004, 15:03:19
    #32524118
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
Если у тебя FireBird 1.5, то скачай ReleaseNotes .
Многие вопросы отпадут сразу.
...
Рейтинг: 0 / 0
19.05.2004, 15:10:58
    #32524149
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
у меня FireBird 1.0 !
Ок! Установлю 1.5 и попробую разобраться...
...
Рейтинг: 0 / 0
19.05.2004, 15:13:36
    #32524160
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
... а как решить эту проблему оптимально окольными путями, на FireBird 1.0 (не оптимальный я знаю, необходимо написать 40 процедур для каждой из таблиц )
...
Рейтинг: 0 / 0
19.05.2004, 15:18:16
    #32524171
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
Процедура в данном случае вообще нафиг не нужна.
Твои траблы в том, что ты уже заранее загнал себя в рамки выбранного решения (неверно выбранного), а теперь мужественно воюешь сам с собой и сервером.
С другой стороны подойти не пробовал?
...
Рейтинг: 0 / 0
19.05.2004, 15:18:49
    #32524175
mv
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
19.05.2004, 15:47:28
    #32524268
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
Мимопроходящий
Процедура в данном случае вообще нафиг не нужна.
Твои траблы в том, что ты уже заранее загнал себя в рамки выбранного решения (неверно выбранного), а теперь мужественно воюешь сам с собой и сервером.
С другой стороны подойти не пробовал?

Может и так, зациклился я на одном месте с этой проблемой. Стремился перенести максимально всю бизнес-логику на сервер... Последняя проблемка с которой я столкнулся, это при Inserte необходимо вернуть код записи, а код этот формируется автоматически, тригером. Вот я и пытаюсь написать хранимую процедуру, которая возвращала бы прогнозируемый код записи для указаной таблицы.
Хотел это перенести на клиентскую часть, но не знаю, как управлять генератором. Может подсажете? :)
...
Рейтинг: 0 / 0
19.05.2004, 15:50:20
    #32524277
VF
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
19.05.2004, 15:51:35
    #32524281
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
А то!
Конечно подскажем.
Читай тут .
...
Рейтинг: 0 / 0
19.05.2004, 15:53:46
    #32524288
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача имени таблицы как параметр
Ух, на граблях уже мозоли, похоже.

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

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

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

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


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