Sql Oracle:触发将值插入到另一个表中,该表具有一个附加的自动递增主键列
我有一张甲骨文表Sql Oracle:触发将值插入到另一个表中,该表具有一个附加的自动递增主键列,sql,oracle,triggers,Sql,Oracle,Triggers,我有一张甲骨文表 Table1 ( roll_number, myTimestamp ) 我还有一张Oracle表 Table2 ( roll_number, myTimestamp, recordid --> this is supposed to be an auto increment primary key ) 我想要的是一个触发器,它将插入到Table1中的记录也插入到Table2中,但附加的主键整数列recordid会自动递增并插入。 我可以在不使用触发器的情况下插入记录,
Table1
(
roll_number,
myTimestamp
)
我还有一张Oracle表
Table2
(
roll_number,
myTimestamp,
recordid --> this is supposed to be an auto increment primary key
)
我想要的是一个触发器,它将插入到Table1
中的记录也插入到Table2
中,但附加的主键整数列recordid
会自动递增并插入。
我可以在不使用触发器的情况下插入记录,而Table2
具有此附加主键列约束,但是当我尝试此附加列时,它会出现问题
我曾尝试创建一个自动递增序列(比如说MySeq
),并尝试插入以创建触发器
create trigger MyTrigger
after insert on Table1
for each row
begin
insert into Table2 values ( :new.roll_number,:new.myTimestamp,select MySeq.nextval into :new.recordid from dual );
end;
但是没有运气。
提前感谢请尝试以下内容:
创建或替换触发器MyTrigger
在表1中插入后
每行
申报
v_recordid int
开始
从dual中选择MySeq.nextval进入v_recordid
将值(:new.roll\u number,:new.myTimestamp,v\u recordid)插入表2中(roll\u number,myTimestamp,recordid);
结束 请尝试以下操作:
创建或替换触发器MyTrigger
在表1中插入后
每行
申报
v_recordid int
开始
从dual中选择MySeq.nextval进入v_recordid
将值(:new.roll\u number,:new.myTimestamp,v\u recordid)插入表2中(roll\u number,myTimestamp,recordid);
结束 它没有问题-至少,它在我的11gXE上正常工作(您使用哪个数据库版本?)
或者,使用
选择,而不是值:
SQL> create or replace trigger mytrigger
2 after insert on table1
3 for each row
4 begin
5 insert into table2
6 select :new.roll_number, :new.mytimestamp, myseq.nextval
7 from dual;
8 end;
9 /
Trigger created.
SQL> insert into table1 values (2, sysdate);
1 row created.
SQL> select * From table2;
ROLL_NUMBER MYTIMESTAMP RECORDID
----------- ------------------- ----------
1 12.03.2021 07:14:42 1
2 12.03.2021 07:16:00 2
SQL>
它没有什么问题-至少,它在我的11gXE上正常工作(您使用哪个数据库版本?)
或者,使用选择,而不是值:
SQL> create or replace trigger mytrigger
2 after insert on table1
3 for each row
4 begin
5 insert into table2
6 select :new.roll_number, :new.mytimestamp, myseq.nextval
7 from dual;
8 end;
9 /
Trigger created.
SQL> insert into table1 values (2, sysdate);
1 row created.
SQL> select * From table2;
ROLL_NUMBER MYTIMESTAMP RECORDID
----------- ------------------- ----------
1 12.03.2021 07:14:42 1
2 12.03.2021 07:16:00 2
SQL>
运气不好:获取编译错误ORA-02287:此处不允许序列号
我已更改了答案。它正在工作。是的,这个正在工作。谢谢不客气。祝你好运。运气不好:编译错误ORA-02287:此处不允许序列号
我已更改了答案。它正在工作。是的,这个正在工作。谢谢不客气。最好的祝愿。如果你像我一样发布它(这样我们就可以看到你真正执行了什么以及Oracle如何响应),这可能会更容易提供帮助。它现在可以工作了。我抄你的答案时犯了一个小错误。谢谢如果你像我一样发布它(这样我们就可以看到你真正执行了什么,以及Oracle如何响应),这可能会更容易提供帮助。它现在可以工作了。我抄你的答案时犯了一个小错误。谢谢您的Oracle版本是什么?从12.1版开始,您可以定义一个自动递增的标识列,而无需对序列进行微观管理。我的Oracle版本是11.2.0.4.0您的Oracle版本是什么?从12.1版开始,您可以定义一个自动递增的标识列,而无需对序列进行微观管理。我的Oracle版本是11.2.0.4.0