Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача параметров для Select в хранимую процедуру [D5, IB5.x]


Daiz13 ©   (2002-03-26 15:58:00) 

Ниже приведена хранимая процедура, никак не могу разобраться как в нее можно передать условия для Select.
Условия передаються через AWHERE_COND, для примера это может быть "(sernum="32" or sernum="38" or sernum="39" ) AND (daytime>="01.01.2002" AND daytime<="27.11.2002")"


CREATE PROCEDURE GET_MEASURES_SUMMARY (AWHERE_COND VARCHAR)
RETURNS (
sum_energy NUMERIC(15, 3),
sum_volume NUMERIC(15, 3)
)
AS
BEGIN
SELECT
(a.TOTALENERGY - b.TOTALENERGY),
(a.TOTALVOLUME - b.TOTALVOLUME)
FROM MEASURES a, measures b
WHERE
a.id=(select min(id) from measures WHERE :AWHERE_COND)
and
b.id=(select max(id) from measures WHERE :AWHERE_COND)
INTO :sum_energy, :sum_volume;
END


Daiz13   (2002-03-26 17:22:00) [1]

Ладно, спасибо всем.
Мы пойдем иным путем...


OlegE   (2002-03-26 17:17:00) [2]

>Daiz13
"Формат запроса и количество параметров заранее неизвестны,"
это как раз тот случай!

"ди и не стану я всю прогу под FIBPlus переделывать только из-за этого."
Ты спросил совет, я тебе его дал, а воспользуешься или нет - твое дело.


Johnmen   (2002-03-26 17:04:00) [3]

>Daiz13 © : Тем более, что контретнотвою проблему в даннойпостановке это не решит !


Daiz13   (2002-03-26 16:58:00) [4]

Запрос1:
(sernum="32" or sernum="38" or sernum="39" ) AND (daytime>="01.01.2002" AND daytime<="27.11.2002")

Запрос2:
(sernum="32")

Запрос3:
1

Формат запроса и количество параметров заранее неизвестны, ди и не стану я всю прогу под FIBPlus переделывать только из-за этого.


OlegE   (2002-03-26 16:48:00) [5]

Я это и имею в виду:
Using macroses you can dynamically change names of tables and fields in a query, conditions, etc.


Daiz13   (2002-03-26 16:36:00) [6]

>OlegE
Нскольно я понимаю, так можно переавать переменные, а мне нужно в виде переменной весь запрос передать.


Johnmen   (2002-03-26 16:34:00) [7]

>OlegE © : А кто же их корректно примет ???????


OlegE   (2002-03-26 16:32:00) [8]

Еще раз повторяю FIBPlus позволяет передавать такие параметры!


Johnmen   (2002-03-26 16:31:00) [9]

>OlegE © : Все верно, но это на уровне приложения, что можно было делать и в RxQuery.


Daiz13   (2002-03-26 16:28:00) [10]

Задача, на самом деле, посложнее и одним запросом мне не обойтись. Хотелось из всех для удобства соединить в хранимой процедуре, да видно не судьба...


DiggerAbstract   (2002-03-26 16:22:00) [11]

создавай динамический SQL запрос


OlegE   (2002-03-26 16:21:00) [12]

FIBPlus - это позволяют!

While working with TpFIBDataSet and TpFIBQuery it is also possible to use in the query macroses of the following types:
@MACROS_NAME[%][#]


@ - a sign of the beginning of the macros
% - an optional beginning of the default value of the macros
# - an optional sign that it it necessary to write the value of the macros
in inverted commas.

Using macroses you can dynamically change names of tables and fields in a query, conditions, etc.
To get access to values of macroses use ParamByName. ParamNameCount helps to get the total number of macroses in a query.

The example of using of macroses:

select * from @TT%TABLE1 where @F%FIELD1=@VAL%#John

The default form of the query before sending off to the server is

select * from TABLE1 where FIELD1="John"


Daiz13   (2002-03-26 16:07:00) [13]

Тогда от такого подхода мне придеться отказаться - количество параметров и формат условия заранее неизвестны


Johnmen   (2002-03-26 16:05:00) [14]

...WHERE :AWHERE_COND...
Фактически ты подразумеваешь не параметр, а макроподстановку,
а это дело отсутствует в синтаксисе БД.

Так, что придется -
...WHERE (F1=:F1) AND (F2=:F2)...и т.д.


Наверх

Титульная страница Поиск, карта сайта Написать письмо