Oracle 11g - 是否可以确定函数/过程中的更新或插入?
Oracle 11g - Is it possible to determine update or insert in a function / procedure?
我正在使用 Oracle 11g,我有一个问题。
我想做的是:
- 办手续
- 调用此过程时,它将数据从一个 table 移动到另一个(列几乎相同,但主键不同)
- 因为他们不使用与PK相同的字段,所以如果只使用insert语句会出错
- 所以如果 table 有一个键而不是更新,我想做,否则插入。
即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
);
我想要的伪装:
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
您想使用 MERGE
一些参考资料:
作为 valentin 建议的 MERGE 解决方案的替代方案,您可以使用以下结构:
begin
-- try the insert
insert...
exception
when dup_val_on_index
then
update...
end;
我正在使用 Oracle 11g,我有一个问题。
我想做的是:
- 办手续
- 调用此过程时,它将数据从一个 table 移动到另一个(列几乎相同,但主键不同)
- 因为他们不使用与PK相同的字段,所以如果只使用insert语句会出错
- 所以如果 table 有一个键而不是更新,我想做,否则插入。
即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
);
我想要的伪装:
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。(实际上,此作业将由 OracleDBMS_SCHEDULE
执行)
感谢您的热心回答:D
您想使用 MERGE
一些参考资料:
作为 valentin 建议的 MERGE 解决方案的替代方案,您可以使用以下结构:
begin
-- try the insert
insert...
exception
when dup_val_on_index
then
update...
end;