【发布时间】:2020-01-17 05:12:02
【问题描述】:
我有一个 oracle 表
- 使用序列的自动递增主键。
- 唯一键
- 非唯一字段
create table FOO (
ai_id number primary key,
name varchar(20),
bar varchar(20)
CONSTRAINT foo_uk_name UNIQUE (name)
);
create sequence FOO_seq;
create or replace trigger FOO_trg
before insert on FOO
for each row
begin
select FOO_seq.nextval into :new.ai_id from dual;
end;
我有单独的存储过程来更新表格
create PROCEDURE UPSERT_FOO(
name_input IN VARCHAR2,
bar_input IN VARCHAR2
begin
begin
insert into FOO ( name, bar )
values ( name_input, bar_input )
exception
when dup_val_on_index then
update FOO
set bar = bar_input
where name = name_input
end;
end;
这工作得很好,但唯一的问题是,序列“FOO_seq”总是增加,无论它是更新还是插入(因为 FOO_seq 在插入之前在“FOO_trg”中增加)。
有没有办法在不影响性能的情况下,只在插入时增加序列?
【问题讨论】: