我公司有MES程式,为完成一定的功能,需编写触发器,我在一个其他表作了测试,是OK的,
所以转移到正式表上,SQL如下:
CREATE or replace TRIGGER TR_TEST
after INSERT
ON sajet.g_Sn_Status
referencing OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
--IF (:NEW.PROCESS_ID=100007) or (:NEW.PROCESS_ID=100008) THEN
--smt.smtReduce_New(:NEW.WORK_ORDER,:NEW.SERIAL_NUMBER,:NEW.EMP_ID,:NEW.MODEL_ID,:NEW.PDLINE_ID);--------------test sql--------------
for i in 1..10000 loop
INSERT INTO SAJET.jackson_smt_wo(WORK_ORDER)
VALUES('houruijie') ;
end loop;
--------------test sql--------------
--END IF;
END TR_TEST;
表sajet.g_Sn_Status不断由MES程式产生的新记录,但表SAJET.jackson_smt_wo中始终不见有新记录生成,
又在sql plus中手工insert into sajet.g_Sn_Status ,结果触发器触发了,SAJET.jackson_smt_wo表中
多了10000笔新记录,为什么会这样?之前测试OK的表是数据量非常少的小表,而sajet.g_Sn_Status
是多达1000多条记录的大表了(当然还有多达5、6亿的大表呢)
两表在其他上看不到有什么异同
难道有由程式新增的记录不触发触发器而在后台新增记录则可以触发呢?实在想不通,
还请各位先生教我!!!!!!!!!!!!!!!
所以转移到正式表上,SQL如下:
CREATE or replace TRIGGER TR_TEST
after INSERT
ON sajet.g_Sn_Status
referencing OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
--IF (:NEW.PROCESS_ID=100007) or (:NEW.PROCESS_ID=100008) THEN
--smt.smtReduce_New(:NEW.WORK_ORDER,:NEW.SERIAL_NUMBER,:NEW.EMP_ID,:NEW.MODEL_ID,:NEW.PDLINE_ID);--------------test sql--------------
for i in 1..10000 loop
INSERT INTO SAJET.jackson_smt_wo(WORK_ORDER)
VALUES('houruijie') ;
end loop;
--------------test sql--------------
--END IF;
END TR_TEST;
表sajet.g_Sn_Status不断由MES程式产生的新记录,但表SAJET.jackson_smt_wo中始终不见有新记录生成,
又在sql plus中手工insert into sajet.g_Sn_Status ,结果触发器触发了,SAJET.jackson_smt_wo表中
多了10000笔新记录,为什么会这样?之前测试OK的表是数据量非常少的小表,而sajet.g_Sn_Status
是多达1000多条记录的大表了(当然还有多达5、6亿的大表呢)
两表在其他上看不到有什么异同
难道有由程式新增的记录不触发触发器而在后台新增记录则可以触发呢?实在想不通,
还请各位先生教我!!!!!!!!!!!!!!!
解决方案 »
- [pipi19830904]ORACLE 8下,如何根据存储过程名,查询进程号
- ORACLE full outer join问题
- 请问oracle数据库中单表的记录数有没有限制?
- 关于在存储过程中调用其他存储过程的权限问题.
- oracle数据导入问题,主键问题
- 高分求助:在sql语句中如何在字段之间增加特定的分隔符?
- Oracle视频资料
- 存储过程问题 300分 在线等待
- 如何让存储过程返回一个结果集?
- ORA-12154 TNS:Could not resolve service name错误的原因是什么,解决方法!
- 为什么sys用户的很多系统权限对应的ADMIN_OPTION为no还能给其他用户授权
- 用pl/sql导出表后,原先数据库的表就没了是吗
smt.smtReduce_New
这是什么东西?做触发器同步最容易出错的是类型不匹配,你检查一下好了,最好做一个exception处理表。
CREATE or replace TRIGGER TR_TEST
after update
of process_id
ON sajet.g_Sn_Status
referencing OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
--IF (:NEW.PROCESS_ID=100007) or (:NEW.PROCESS_ID=100008) THEN
--------------test sql--------------
for i in 1..10000 loop
INSERT INTO SAJET.jackson_smt_wo(WORK_ORDER)
VALUES('houruijie') ;
end loop;
--------------test sql--------------
END IF;
END TR_TEST;