Текущий архив: 2002.04.18;
Скачать: CL | DM;
Вниз
Передача параметров для Select в хранимую процедуру Найти похожие ветки
← →
Daiz13 (2002-03-26 15:58) [0]Ниже приведена хранимая процедура, никак не могу разобраться как в нее можно передать условия для 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
← →
Johnmen (2002-03-26 16:05) [1]...WHERE :AWHERE_COND...
Фактически ты подразумеваешь не параметр, а макроподстановку,
а это дело отсутствует в синтаксисе БД.
Так, что придется -
...WHERE (F1=:F1) AND (F2=:F2)...и т.д.
← →
Daiz13 (2002-03-26 16:07) [2]Тогда от такого подхода мне придеться отказаться - количество параметров и формат условия заранее неизвестны
← →
OlegE (2002-03-26 16:21) [3]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"
← →
DiggerAbstract (2002-03-26 16:22) [4]создавай динамический SQL запрос
← →
Daiz13 (2002-03-26 16:28) [5]Задача, на самом деле, посложнее и одним запросом мне не обойтись. Хотелось из всех для удобства соединить в хранимой процедуре, да видно не судьба...
← →
Johnmen (2002-03-26 16:31) [6]>OlegE © : Все верно, но это на уровне приложения, что можно было делать и в RxQuery.
← →
OlegE (2002-03-26 16:32) [7]Еще раз повторяю FIBPlus позволяет передавать такие параметры!
← →
Johnmen (2002-03-26 16:34) [8]>OlegE © : А кто же их корректно примет ???????
← →
Daiz13 (2002-03-26 16:36) [9]>OlegE
Нскольно я понимаю, так можно переавать переменные, а мне нужно в виде переменной весь запрос передать.
← →
OlegE (2002-03-26 16:48) [10]Я это и имею в виду:
Using macroses you can dynamically change names of tables and fields in a query, conditions, etc.
← →
Daiz13 (2002-03-26 16:58) [11]Запрос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 переделывать только из-за этого.
← →
Johnmen (2002-03-26 17:04) [12]>Daiz13 © : Тем более, что контретно твою проблему в данной постановке это не решит !
← →
OlegE (2002-03-26 17:17) [13]>Daiz13
"Формат запроса и количество параметров заранее неизвестны,"
это как раз тот случай!
"ди и не стану я всю прогу под FIBPlus переделывать только из-за этого."
Ты спросил совет, я тебе его дал, а воспользуешься или нет - твое дело.
← →
Daiz13 (2002-03-26 17:22) [14]Ладно, спасибо всем.
Мы пойдем иным путем...
Страницы: 1 вся ветка
Текущий архив: 2002.04.18;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.005 c