Как я могу использовать If Else в предложении where - PullRequest
2 голосов
/ 11 ноября 2019

Внутри хранимой процедуры я хочу получить список клиентов на основе входного параметра in_customerid, если input customerid не равен NULL или 0, тогда выбрать все клиенты, где customerId равен in_customerid, в противном случае выбрать всех клиентов.

Iпробовал код здесь и с оператором case

select * from Customer
WHERE (IF in_customerId = 0 OR  in_customerId IS NULL 
   THEN customerId>0
   ELSE
    customerId=in_customerId
  END IF)

, если input customerid не равен NULL или 0, тогда выбираем всех клиентов, где customerId равен in_customerid, в противном случае выбираем всех клиентов.

Ответы [ 3 ]

1 голос
/ 11 ноября 2019

Вы можете использовать выражение CASE .. WHEN, так как вам не нужно никаких условий в случае, если переданный параметр имеет значение NULL или 0 здесь следующим образом:

SELECT  *
FROM CUSTOMER
WHERE
    CUSTOMERID = CASE
        WHEN IN_CUSTOMERID = 0
             OR IN_CUSTOMERID IS NULL THEN CUSTOMERID
        ELSE IN_CUSTOMERID
    END;

Cheers !!

1 голос
/ 11 ноября 2019

Вы почти с вашим кодом. Попробуйте вместо этого:

SELECT  *
  FROM  Customer
  WHERE ((in_customerId IS NULL OR in_customerId = 0) OR
        (in_customerId IS NOT NULL AND in_customerId <> 0 AND customerId = in_customerId))

Это вернет всех клиентов, у которых параметр in_customerId равен NULL.

В случае, если in_customerId имеет значение, он вернет только совпадающие строки.

0 голосов
/ 11 ноября 2019

Вы можете использовать nvl() функцию с нулевым аргументом как nvl(in_customerId,0), чтобы объединить регистры для in_customerId для нуля или нуля:

SELECT * 
  FROM customer
 WHERE customerId = case when nvl(in_customerId,0) > 0 
                         then in_customerId 
                         else customerId 
                    end;

Другой вариант использует nvl2()*Функция 1009 * с decode():

SELECT * 
  FROM customer
 WHERE customerId =  decode( in_customerId, 0, customerId, 
                             nvl2(in_customerId,in_customerId,customerId) );

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...