Strored Procedure...

0

Witam mam taki problem i nie wiem jak sobie z tym poradzic... chce zrobic procedure w firebirdzie wywolana dwoma parametrami : (c_tryb),(c_id_cos)
tryb - to tryb w jakim ma dzialac procedura tz. jak 1 - robi cos lub 0 - to nie robie tego
id_cos - szukana wartrosc

i chodzi o to by przy ustawionym tryb = 0 , nie wykonywal instrukcji WHERE , probowalem wstawiac if() then - ale wyskakuje blad kompilacji... moze mi ktos doradzi..

oto kod:

begin
for
select
tab_1.id
tab_1.cos1
tab_1.cos2
from tab_1
where tab_1.cos1=:C_ID_COS <----- jak zrobic by przy C_TRYB=0 , pomijac ta cala linijke kodu
into
id,
cos1,
cos2,
DO suspend;
end

0

Piszę z palca bez sprawdzania, ale cała idea polega na zabawie z OR i AND. Powinno być coś w tym rodzaju:

WHERE
(
  tab_1.cos1=:C_ID_COS AND :C_ID_COS = 1
)
OR :C_ID_COS = 0

Mam nadzieję, że błędu nie zrobiłem.

0

jak juz, to

WHERE
 ( :C_TRYB = 0 OR (  C_TRYB = 0 AND tab_1.cos1=:C_ID_COS ) )

ale takie cos przy duzych tablicach potrafi zrobic wiele zbednego narzutu..

z if'em zas mozna, ale w stylu:

if BLAH then
   select ...
   from ...
   where - z linia ..
else
   select ...
   from ...
   where - bez linii ..
end

oczywiscie, to razy N da wiele upierdliwosci w pisaniu procki.. wybor nalezy do developerow:)

0

możesz też wygenerować varchara z zapytaniem i potem wykonać go. ale afaik nie będzie to miało powalającej wydajności.

0

dzieki, sprawdze i zobacze czy dziala... dam znac co i jak.... pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1