Java Oracle插入或更新或引发异常
有一个表“EXAMPLE_table”,包含两列。第一列“ID”存储值“5555”,第二列“IS_EXIST”存储字符1字节“0”。如果该值不存在,如何创建一个将执行“插入”操作的过程;如果“ID”与查询中的相同且“IS_exist”==0,如何创建一个执行“更新”操作的过程;如果“ID”与“IS_exist”==0,如何创建一个将在java中处理的异常0我考虑了合并并主要插入解决此问题的方法 它必须大致如下所示: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
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有主键,这种方式正确吗?