Oracle 11g - 是否可以在函数/过程中确定更新或插入?

时间:2015-09-17 08:16:41

标签: oracle function oracle11g case procedure

我正在使用Oracle 11g,我收到了一个问题。

我想做的是:

  • 制作程序
  • 当此过程调用时,它会将数据从一个表移动到另一个表(列几乎相同,但具有不同的主键)
  • 因为,他们不使用与PK相同的字段,如果仅使用insert语句则会出错。
  • 所以我想做的是,如果表有一个键而不是更新,否则插入。

即。 DDL喜欢跟随。它几乎相同,但pk。

create table Tbl_A (
  a_pk number constraints pk_tbl_a primary key
  , b_pk number
  , some_text varchar2(10)
  , created date
  , changed date
);

create table Tbl_B (
  a_pk number
  , b_pk number constraints pk_tbl_b primary key
  , some_text varchar2(10)
  , created date
  , changed date
);

Psuedo我想要的东西:

create or replace procedure mv_data
is 
begin
 case when [if Tbl_B has same b_pk] then [update statement] end
 else [create statement] end;
commit;
end;
  • 我知道我不能像上面那样使用case when,但是我想要实现的就是这样。 MyBatis可能是一个解决方案,但客户端只想用DB来实现这一点。(实际上,这项工作将由Oracle DBMS_SCHEDULE执行)

感谢您的答复:D

2 个答案:

答案 0 :(得分:1)

作为valentin建议的MERGE解决方案的替代方案,您可以使用以下结构:

-source

答案 1 :(得分:0)