какой-то фигнёй занимаетесь.
Если значение переменной null, то любая операция с ней, кроме IS NULL, даёт также null. И когда это значение просачивается наверх, то запись отфильтровывается. Т.ею писать x is not null and x = ? совершенно не нужно. Если же, наоборот, условие не надо учитывать при нулевом значение переменной, то надо написать x is null or x = ?. Ещё есть coalesce, позволяющий заменить null на какое-то другое значение, например на пустую строку:
coalesce(x, '') = ?
Объясню на примере. С клиента с сервере приходит запрос. Пользователь может указать, что он хочет выборку только, где normal.territory_code_link_id = 1 и тогда вызов функции выглядит так: open result for select * from get_list_for_predict(territory_in := 1);. Или, если он хочет увидит все записи - open result for select * from get_list_for_predict(territory_in := null);. То-есть null здесь нужен, чтобы вообще pg понял нужно ли фильтровать по этому полю или нет. Но пока и я не понимаю, как это сделать.
Обсуждают сегодня