[英]CREATE Trigger help Oracle
我正在尝试创建一个触发器,该触发器将执行以下操作。
在表A上插入后,根据ID(TableA.id = TableB.id)查询表B并将相应的信息插入到TableA中
我有种感觉,我还有很长的路要走,所以任何帮助都将不胜感激
CREATE OR REPLACE TRIGGER myTrig
AFTER INSERT
ON TABLEA
BEGIN
INSERT INTO TABLEA
SELECT TABLEB.FIRST_NAME, TABLEB.LAST_NAME, SYSDATE
FROM TABLEA JOIN TABLEB ON
TABLEA.STUDENT_ID=TABLEB.STUDENT_ID
insert into TABLEA values (....);
END;
这是行不通的。 只是想想你在问什么。 您需要一个将行插入tableA时触发的触发器,以将行插入tableA 。 扳机何时停止发射?
Oracle足够聪明,可以介入并防止触发器盘旋成无限大:
SQL> create or replace trigger t69_after_ins
2 after insert on t69
3 begin
4 insert into t69 values ('blah', 'blah', 99);
5 end;
6 /
Trigger created.
SQL>
这是发生的事情:
SQL> insert into t69 values ('this', 'that', 1)
2 /
insert into t69 values ('this', 'that', 1)
*
ERROR at line 1:
ORA-00036: maximum number of recursive SQL levels (50) exceeded
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_INS'
ORA-06512: at "APC.T69_AFTER_INS", line 2
ORA-04088: error during execution of trigger 'APC.T69_AFTER_I
SQL>
“给定两个表中的ID,是否有任何方法可以基于来自TableB的信息来更新TableA?”
如果“更新”实际上是指UPDATE,并且-关键-根据要实现的精确逻辑,则可能是:
SQL> create or replace trigger t69_after_ins
2 after insert on t69
3 begin
4 update t69
5 set name = ( select name from t23
6 where t23.id = t69.id )
7 where name is null;
8 end;
9 /
Trigger created.
SQL> insert into t69 (id, name) values (122, null)
2 /
1 row created.
SQL> select name from t69
2 where id = 122
3 /
NAME
----------
MAISIE
SQL>
但是,这仍然是一个坏主意。 触发器很难理解,并且可能对我们的SQL性能产生不利影响。 因此,我建议您尝试找出一种将逻辑构建到应用程序主体中的方法,而不要尝试使用触发器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.