IF/CASE w WHERE w procedurze

IF/CASE w WHERE w procedurze
AR
  • Rejestracja: dni
  • Ostatnio: dni
0

Szanowni forumowicze,
Mam problem z klauzulą CASE w WHERE, otóż nie widzi mi zmiennej wejściowej.

Kopiuj
-- (...)
begin
FOR
  SELECT K.ID_KARTOTEKA, K.NAZWADL, K.INDEKS, K.DATAZALOZENIA, :DATA as DATASPR
  FROM KARTOTEKA K
  WHERE (
    K.DATAZALOZENIA <
    CASE DATASPR
    WHEN NULL THEN '3011-11-11'
    ELSE :DATA
    END
    )
INTO :ID_KARTOTEKA, :NAZWADL, :INDEKS, :DATAZALOZENIA, :DATAOUT
DO
BEGIN
  suspend;
END
end
 

Wywala mi, że kolumna DATASPR nie istnieje. Utworzyłem ją sztucznie, ponieważ gdy w CASE używałem bezpośrednio :DATA też mi wywalało taki błąd.

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
DATASPR.
At line 17, column 5.

Domyślam się, że idę w stronę przepaści, można więc to inaczej zrobić?

Co ciekawe, taka rzecz jest możliwa w MS SQL:
http://stackoverflow.com/questions/87821/sql-if-clause-within-where-clause

No, ale to mnie nie tyczy:-)

Dziękuję serdecznie,
A.

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
0
Kopiuj
CREATE PROCEDURE NEW_PROCEDURE (
    par1 varchar(10))
as
declare variable zm1 integer;
begin
  select id from tab where name < case when :par1 is null then 'dupa' else :par1 end into zm1;
  suspend;
end

działa

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.