Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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触发器将另一个表中的行插入到新表中?_Sql_Oracle_Plsql_Triggers - Fatal编程技术网

如何使用SQL触发器将另一个表中的行插入到新表中?

如何使用SQL触发器将另一个表中的行插入到新表中?,sql,oracle,plsql,triggers,Sql,Oracle,Plsql,Triggers,这是我的create触发器语句: CREATE OR REPLACE TRIGGER time_of_inserts AFTER INSERT ON t_workers FOR EACH ROW BEGIN SELECT pk_workerid, sysdate archivetime into t_logtable from t_workers END; 我想要的是,每次在t_workers表中插入新行时,我都要插入一个新的主键,它可以是1中唯一的,或者复制插入

这是我的create触发器语句:

CREATE OR REPLACE TRIGGER time_of_inserts 
AFTER INSERT ON t_workers 
FOR EACH ROW 

BEGIN 
   SELECT pk_workerid, sysdate archivetime
   into t_logtable
   from t_workers
END; 
我想要的是,每次在t_workers表中插入新行时,我都要插入一个新的主键,它可以是1中唯一的,或者复制插入的数据,以及插入到新表t_logTable中的时间。但我不知道如何每次都将其插入新表中。你可以在上面看到,到目前为止,我已经想到了什么


我的主要问题是每次触发时都要插入一个新表

但你不是在插入,而是在选择。要插入,需要指定插入关键字:

另外,您不希望从触发表中选择:改为使用:NEW名称空间

CREATE OR REPLACE TRIGGER time_of_inserts 
AFTER INSERT ON t_workers 
FOR EACH ROW 

BEGIN 
   insert into t_logtable 
     values (:new.pk_workerid , sysdate );
END; 

要消除明显的混淆,请选择。。。INTO填充本地PL/SQL变量。这不是我们插入表时使用的语法。

根据您的Oracle版本,始终使用序列或生成。我的主要问题是插入到新表中,每次触发时,他们的查询中似乎都有单词into,我猜这会执行某种形式的插入-不是这样吗?我认为into应该这样做。但对我来说,没有任何insert是很奇怪的,但这是我发现的最好的一个“select into”语句,它用表中的值填充变量。它不会在任何地方插入任何内容。为此,我们有insert语句。