A VARCHAR(1000) - строка, входной параметр, содержит строку вида '~N1~N2~...~N3~'
...
for select F1, F2, F3....... FN from T
where D
into :F1,:F2,:F3.......:FN do begin.....end
(D - ещё какое то условие). Строка длиннющая, поэтому то и не хочется дважды повторять
с использованием переменной-фильтра с ветвлением это выглядит кошмарно:
if(:A is NULL) then
...
for select F1, F2, F3....... FN from T
where D
into :F1,:F2,:F3.......:FN do begin.....end
else
...
for select F1, F2, F3....... FN from T
where D and not(:A containing '~'||T.ID||'~')
into :F1,:F2,:F3.......:FN do begin.....end
можно записать общее условие так:
where D and :A is NULL OR D and not(:A containing '~'||T.ID||'~')
или, то есть
where D and (:A is NULL OR not(:A containing '~'||T.ID||'~'))
как теперь последнюю строку через case слабать ?
case when :A is NULL
then
D
else
D and not(:A containing '~'||T.ID||'~')
end
так ?
(D тоже не короткое, но тут уже было бы терпимо )) )
компилятор ругается на знак сравнения, который внутри D ...