2015-06-21 57 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;