Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle:触发将值插入到另一个表中,该表具有一个附加的自动递增主键列_Sql_Oracle_Triggers - Fatal编程技术网

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