Java Oracle插入或更新或引发异常

Java Oracle插入或更新或引发异常,java,oracle,plsql,Java,Oracle,Plsql,有一个表“EXAMPLE_table”,包含两列。第一列“ID”存储值“5555”,第二列“IS_EXIST”存储字符1字节“0”。如果该值不存在,如何创建一个将执行“插入”操作的过程;如果“ID”与查询中的相同且“IS_exist”==0,如何创建一个执行“更新”操作的过程;如果“ID”与“IS_exist”==0,如何创建一个将在java中处理的异常0我考虑了合并并主要插入解决此问题的方法 它必须大致如下所示: if(ID doesn't exist) insert into if(ID

有一个表“EXAMPLE_table”,包含两列。第一列“ID”存储值“5555”,第二列“IS_EXIST”存储字符1字节“0”。如果该值不存在,如何创建一个将执行“插入”操作的过程;如果“ID”与查询中的相同且“IS_exist”==0,如何创建一个执行“更新”操作的过程;如果“ID”与“IS_exist”==0,如何创建一个将在java中处理的异常0我考虑了合并并主要插入解决此问题的方法

它必须大致如下所示:

if(ID doesn't exist)
  insert into
if(ID exist and IS_EXIST equals 0)
  update 
else 
  throw Exception

但这在程序中会是什么样子呢

这是一种简单的方法,可以在不合并的情况下使用过程抛出或引发某些异常:

procedure PC_INSERT_OR_UPDATE(P_ID number) as
cursor C_1 is
  select M.ID,
         C.IS_EXIST
    from MY_TABLE M
   where M.ID = P_ID;
MSG clob;
begin
for C in C_1 loop
    begin
        if C.ID is null then
            insert into MY_TABLE
                (ID,
                IS_EXIST)
            values
                (P_ID,
                1);
        elsif C.ID is not null and C.IS_EXIST = 0 then
            update MY_TABLE M
            set M.IS_EXIST = 1
            where M.ID = P_ID;
        else
            RAISE_APPLICATION_ERROR(-20001, 'My exception was raised');
        end if;
    exception
        when others then
          rollback;
          MSG := 'Error - ' || TO_CHAR(sqlcode) || ' - ' || sqlerrm;
    end;
end loop;
end;

你正面临着经典的“向上插入”难题。我不知道Oracle实现了什么样的解决方案,但有时对于像我这样的Postgresql用户来说,这是一个真正的问题。这可能对您有帮助:复制。。。我不这么认为,在这种情况下,我们考虑是否只有一个场相等。很好的解决非常简单和清晰。你能附加其他人吗?我不明白你的意思。你能解释一下附加别人是什么意思吗?我的意思是用另一种方式发布,如果ID有主键,这种方式正确吗?