2013-08-30 3 views
1

У меня возникла проблема с построением условного оператора обновления в Oracle. Для понятности, я упростить задачу и в основном мое заявление обновление должно выглядеть следующим образом:Условный оператор обновления в Oracle

UPDATE SAMPLE_TAB1 t 
    SET t.sample_column1 =NVL(t.sample_column1, **SOME LOGIC**); 

***SOME LOGIC*** часть должна выглядеть следующим образом: (Пожалуйста, обратите внимание, это просто псевдо-код)

IF ((SELECT sample_column2 FROM SAMPLE_TAB2 
     WHERE sample_column2= sample_value2 
     AND sample_column3 = sample_value3)='FALSE' THEN 
    t.sample_column1 =0; 
ELSE 

    t.sample_column1 =(SELECT sample_column1 FROM SAMPLE_TAB3 
         WHERE sample_column4= sample_value4 
         AND sample_column5 = sample_value5) 

END IF; 

Любые мысли по этой проблеме приветствуются. Спасибо.

ответ

7

Попробуйте следующий код

UPDATE SAMPLE_TAB1 t 
    SET t.sample_column1 = (
     case when ((SELECT sample_column2 FROM SAMPLE_TAB2 
          WHERE sample_column2= sample_value2 
          AND sample_column3 = sample_value3) = 'FALSE') 
      then 0 
     else 
      (SELECT sample_column1 FROM SAMPLE_TAB3 
         WHERE sample_column4= sample_value4 
         AND sample_column5 = sample_value5) 
     end 

    ) 
    WHERE t.sample_column1 is not null; 
+0

Спасибо Он работал для меня ............ , – Dimuthu

1

попробуйте следующее

UPDATE SAMPLE_TAB1 t 
    SET t.sample_column1 = NVL((SELECT sample_column2 FROM ...), 0) 
WHERE t.sample_column1 is not null 
; 
+0

Привет насчет логики, связанных SAMPLE_TAB3 затем – Dimuthu

Смежные вопросы