Если другая логика конвертируется в Select case - Oracle - PullRequest
0 голосов
/ 04 декабря 2018
IF inputVariable = '0'        
            THEN
            DELETE existingTemptable
            WHERE  status != 999;
        ELSE
            IF inputVariable = '1'    
            THEN
            DELETE existingTemptable
            WHERE  status = 999;  
        ELSE
            DELETE existingTemptable
            WHERE  status != 999
                   AND date < utils.dateadd('MONTH', -6, SYSTIMESTAMP);
            END IF;
        END IF;

Это Если логика присутствует во временной таблице, и мне нужно удалить временную таблицу и сделать так, чтобы она только выбирала запрос, поэтому подошел с WITH CTE, но застрял в приведенном ниже

что должно быть в предложении where

 with existingTemptable as
    (
    //got the temp table here 
    ), myTable as
    (
      Select * from existingTemptable  
      **where 
      status = CASE WHEN inputVariable = '0' THEN 999 
                                        WHEN inputVariable != '0' AND inputVariable != '1' THEN 999
                                        ELSE status 
                                        END**
    )Select  * from myTable 

Что вставить в предложение WHERE , чтобы оно имитировало логику If выше

1 Ответ

0 голосов
/ 04 декабря 2018

Вы должны быть осторожны, если inputVariable или status (или оба) могут быть null.Остальное - прямое применение логических правил, которые каждый изучает (или должен выучить) в средней школе.

select *
from   existingTemptable
where  inputVariable = '0' and (status  = 999 or status is null)
       or
       inputVariable = '1' and (status != 999 or status is null)
       or
       (inputVariable is null or inputVariable not in ('0', '1'))
            and (status = 999 or status is null) and date >= [whatever]

Примечание. Даже в отсутствие обработки нуля вы не можете написать предложение where свыражение case;это потому, что в одной ветви вам требуется "не равно", и вы не можете сделать это с помощью простого выражения case.

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