она принимает id записей из разных таблиц по которым фильтровать и bool переменную, чтобы понимать нужно ли вообще использовать данный фильтр. Но не важно стоит ли territory_filter true или false. Все равно условие в where срабатывает. Если сделать так:
AND (territory_in NOTNULL AND normal.territory_code_link_id = territory_in);
то фильтр срабатывает в любом случае, даже когда territory_in IS NULL. Делать под каждую комбинацию фильтров свою хранимку не вариант, так как таких комбинаций очень много будет.
То-есть есть три фильтра: territory_in, ministry_in, program_in и каждый из них может и задействоваться, и нет. Как это в процедуре описать? Проверка на NULL и дополнительная BOOL переменная не работают.
Либо я чего-то не понимаю в вашем описании, любо вы какой-то фигнёй занимаетесь. Если значение переменной null, то любая операция с ней, кроме IS NULL, даёт также null. И когда это значение просачивается наверх, то запись отфильтровывается. Т.ею писать x is not null and x = ? совершенно не нужно. Если же, наоборот, условие не надо учитывать при нулевом значение переменной, то надо написать x is null or x = ?. Ещё есть coalesce, позволяющий заменить null на какое-то другое значение, например на пустую строку: coalesce(x, '') = ?
Обсуждают сегодня