![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача параметров для 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)...и т.д.