![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранимая процедура и её входные параметры. [D6, IB6.x]
korvin © (2004-12-24 16:45:00)Как мне в серверной процедуре проверить на входе параметр и если он, скажем, = 0 то вообще его не использовать в этой самой процедуре?
Он используется естественно в установке фильтров where.
DSKalugin (2004-12-25 13:43:00) [1]Понял уже спасибо
DSKalugin (2004-12-25 13:28:00) [2]2 stud © (24.12.04 17:04
если параметр type_usl - какое-то число, то он учавствует в критерии выбора , если нет, выбираются все записи
а поподробней можно про
(usl_spr.type_usl_=:type_usl or (:type_usl=0))?
если type_usl=1 тогда что? Как вообще эта конструкция работает?
}|{yk (2004-12-24 19:42:00) [3]в 1.5 есть execute statement, так что можно код заносить в базу и по ID брать нужный. Хотя быстродействие от этого упадет...
Vemer (2004-12-24 19:18:00) [4]У меня в большинстве ХП есть входной параметр FIN(function ID Number :)):
If (FIN = 1) Then
.....
If (FIN = 2) Then
......
Позволяет повесить на 1 ХП много похожих действий.
stud (2004-12-24 17:04:00) [5]например вот, если параметр type_usl - какое-то число, то он учавствует в критерии выбора , если нет, выбираются все записи
for select usl_spr.id, usl_spr.name, usl_spr.price, usl_spr.pr, usl_spr.type_usl_, usl_spr.parent, usl_spr.col_vo
from usl_spr where ( usl_spr.type_usl_=:type_usl or (:type_usl=0))
DSKalugin (2004-12-24 16:56:00) [6]Я не придумал ничего лучше как продублировать ткст процедуры но без этого параметра VEND_ID
CREATE PROCEDURE "getCross" (
DET_ID INTEGER,
VEND_ID INTEGER)
RETURNS (
CR_ID INTEGER,
CR_NUMBER VARCHAR(30),
CR_MAKER VARCHAR(30),
CR_OPIS VARCHAR(90),
CR_VEND_ID INTEGER,
CR_TP_ID INTEGER)
AS
begin
if (VEND_ID=-1) then begin
for
SELECT CROSS.DL_ID1, SKLAD_NUMBERS.DIRTY_COD, BOOK_MAKERS.MAKER_NAME,
SKLAD_NUMBERS.SKLAD_COMMENT, CROSS.CR_VENDOR_ID, CROSS.CR_TYPE_ID
FROM CROSS
INNER JOIN SKLAD_NUMBERS ON (SKLAD_NUMBERS.ID_DET_LIST = CROSS.DL_ID1)
INNER JOIN BOOK_MAKERS ON (BOOK_MAKERS.ID_MAKERS = SKLAD_NUMBERS.MAKER_ID)
where (CROSS.DL_ID2=:det_id) and (is_deleted is null)
union
SELECT CROSS.DL_ID2, SKLAD_NUMBERS.DIRTY_COD, BOOK_MAKERS.MAKER_NAME,
SKLAD_NUMBERS.SKLAD_COMMENT, CROSS.CR_VENDOR_ID, CROSS.CR_TYPE_ID
FROM CROSS
INNER JOIN SKLAD_NUMBERS ON (SKLAD_NUMBERS.ID_DET_LIST = CROSS.DL_ID2)
INNER JOIN BOOK_MAKERS ON (BOOK_MAKERS.ID_MAKERS = SKLAD_NUMBERS.MAKER_ID)
where (CROSS.DL_ID1=:det_id) and (is_deleted is null)
into :cr_id, :cr_number, :cr_maker, :cr_opis, :CR_Vend_ID, :CR_tp_ID
do suspend;
end
else begin
for
SELECT CROSS.DL_ID1, SKLAD_NUMBERS.DIRTY_COD, BOOK_MAKERS.MAKER_NAME,
SKLAD_NUMBERS.SKLAD_COMMENT, CROSS.CR_VENDOR_ID, CROSS.CR_TYPE_ID
FROM CROSS
INNER JOIN SKLAD_NUMBERS ON (SKLAD_NUMBERS.ID_DET_LIST = CROSS.DL_ID1)
INNER JOIN BOOK_MAKERS ON (BOOK_MAKERS.ID_MAKERS = SKLAD_NUMBERS.MAKER_ID)
where (CROSS.DL_ID2=:det_id) and (is_deleted is null) and (CR_VENDOR_ID=:VEND_ID)
union
SELECT CROSS.DL_ID2, SKLAD_NUMBERS.DIRTY_COD, BOOK_MAKERS.MAKER_NAME,
SKLAD_NUMBERS.SKLAD_COMMENT, CROSS.CR_VENDOR_ID, CROSS.CR_TYPE_ID
FROM CROSS
INNER JOIN SKLAD_NUMBERS ON (SKLAD_NUMBERS.ID_DET_LIST = CROSS.DL_ID2)
INNER JOIN BOOK_MAKERS ON (BOOK_MAKERS.ID_MAKERS = SKLAD_NUMBERS.MAKER_ID)
where (CROSS.DL_ID1=:det_id) and (is_deleted is null) and (CR_VENDOR_ID=:VEND_ID)
into :cr_id, :cr_number, :cr_maker, :cr_opis, :CR_Vend_ID, :CR_tp_ID
do suspend;
end
end