2010-12-23 77 views
3

我正在嘗試做類似這樣的事情,但無法將它放入oracle編碼中。if語句的更新表PL/SQL

BEGIN 
IF ((SELECT complete_date FROM task_table WHERE task_id = 1) IS NULL) 
THEN 
UPDATE task_table SET complete_date = //somedate WHERE task_id = 1; 
ELSE 
UPDATE task_table SET complete_date = NULL; 
END IF; 
END; 

但這不起作用。我也試過

IF EXISTS(SELECT complete_date FROM task_table WHERE task_id = 1) 

沒有運氣。

回答

8

如果你的實際邏輯像上面那樣,我不認爲你需要程序塊。

假設這是你的任務:

「如果complete_date爲ID 1值爲NULL,與XXX更新,否則將其設置爲空」。

你可以只運行...

Update task_table 
    set complete_date = nvl2(complete_date,NULL, <**your date**>) 
    where task_id = 1; 

這將只更新那些記錄complete_date是空與新的日期。

+0

但是,如果它不是空然後讓它爲空 – Matt 2010-12-23 19:00:12

+1

馬特,更新我上面的查詢。 – 2010-12-23 19:02:49

0

這部分的意圖是什麼?

IF ((SELECT complete_date FROM task_table WHERE task_id = 1) IS NULL) 

是否要查找是否有行where complete_date爲null且task_id = 1?

還是檢查task_id = 1是否沒有行?