Oracle插入或更新或抛出异常

时间:2015-05-06 20:00:12

标签: java oracle plsql

有一个'EXAMPLE_TABLE'表,其中包含两列。第一列'ID'存储值'5555',第二列'IS_EXIST'存储char 1字节'0'。如果这个值不存在,如何创建一个“INSERT INTO”的过程,如果'ID'与查询和'IS_EXIST'== 0相同,则创建一个'UPDATE',或抛出一些将在java如果'ID'相同和'IS_EXIST'!= 0.我考虑了合并并主要插入解决此问题的方法。

它必须大致如下:

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

但这会在程序中看起来如何?

1 个答案:

答案 0 :(得分:1)

如果你想在没有合并的情况下使用过程抛出或引发一些异常,这是一种简单的方法:

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;