更新并插入 oracle PL/SQL 以及 if else 条件

Update and insert in oracle PL/SQL along with if else condition

请通过以下代码片段查找:

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 块中添加插入语句。 在上面的代码更新中工作。但是插入语句没有得到 executed.Please 让我知道怎么了?

如果我理解你,你需要 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);   

你可以像这样使用 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;