2015-06-21 54 views
1

請在下面的代碼片段找到一起:更新並插入如果其他條件

BEGIN 
    IF (in_config1 IS NOT NULL OR in_config1 !='') THEN 
     UPDATE question_table 
     SET comment = in_config1 
     WHERE id= id 
     AND questionid = 1; 
    ELSE 
     INSERT INTO question_table(
     tid 
     ,questionid 
     ,comments) 
     VALUES(id 
     , 1 
     , in_config1); 
END IF; 
END; 

我的要求是基於一些condition.If更新來更新question_table失敗假若記錄中櫃面不存在,那麼我需要在else塊中添加插入語句。 在上面的代碼更新正在工作。但插入語句沒有得到執行。請讓我知道什麼是錯的?

+0

您是否收到任何錯誤?你試過什麼樣的數據? – Hawk

+0

沒有我沒有得到任何錯誤。基本上我想修改成upsert語句。如果行匹配,則更新行,否則插入行 – nutty

回答

3

如果我理解你,你需要upsert語句,如果記錄匹配某個值,那麼你需要更新,如果沒有,則插入。在這種情況下最好的選擇可以爲MERGE條款。它高效,靈活且可讀。以下是一個通用腳本,可能需要根據從中獲取值以及表結構的位置進行較小的更改。

MERGE INTO question_table a 
USING (SELECT id, your_key, in_config1 FROM DUAL) b 
ON (a.id = b.id) 
WHEN MATCHED THEN 
UPDATE question_table 
SET comment = in_config1 
WHEN NOT MATCHED THEN 
INSERT INTO question_table( 
     tid 
    ,questionid  
    ,comments) 
    VALUES(id 
    , 1 
    , in_config1); 
0

簡單,你可以像這樣使用SQL%NOTFOUND

BEGIN 
    IF (in_config1 IS NOT NULL OR in_config1 != '') THEN 
     UPDATE question_table 
     SET comment = in_config1 
     WHERE id = id 
     AND questionid = 1; 
     if sql%notfound then 
     INSERT INTO question_table (tid, questionid, comments) VALUES (id, 1, in_config1); 
     end if; 
    END IF; 
    exception 
    when others then 
     dbms_output.put_line(sqlerrm); 
    END;