ORACLE触发器问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 16:35:31
create table mytb(id int primary key,name varchar2(10));

create sequence seq_id;

create or replace trigger tri_ins_mytb
before insert on mytb
for each row
declare
v_num number;
begin
select seq_id.nextval into v_num from dual;
:new.id:=v_num;
end;

当我向表里插入数据的时候提示触发器未通过验证,请问这是什么回事?

这里没有问题,不知道你是怎么做的。我怀疑表中已有数据,序列生成的数值跟已有主键重复。

SQL> create table mytb(id int primary key,name varchar2(10));

表已创建。

SQL>
SQL>
SQL> create sequence seq_id;

序列已创建。

SQL>
SQL> create or replace trigger tri_ins_mytb
2 before insert on mytb
3 for each row
4 declare
5 v_num number;
6 begin
7 select seq_id.nextval into v_num from dual;
8 :new.id:=v_num;
9 end;
10 /

触发器已创建

SQL> insert into mytb (name) values('Alfred');

已创建 1 行。

SQL> insert into mytb (id,name) values(2,'Linda');

已创建 1 行。

SQL> select *from mytb;

ID NAME
---------- --------------------
1 Alfred
2 Linda

SQL> insert into mytb (id,name) values(2,'Linda');

已创建 1 行。

SQL> select *from mytb;