我有两个触发器。一种是用于UPDATE和INSERT的触发器,另一种是用于DELETE的触发器。
create or replace
TRIGGER insup_trigger
BEFORE INSERT OR UPDATE ON USER_GROUPS
FOR EACH ROW
BEGIN
UPDATE PROJECTS
SET TOUCHED = 1
WHERE ID IN (SELECT PJ_ID
FROM PROJECT_ROLES_GROUPS
WHERE GRP_ID = :NEW.GRP_ID);
END;
和删除触发器:
create or replace
TRIGGER MARK
BEFORE DELETE ON USER_GROUPS
FOR EACH ROW
BEGIN
UPDATE PROJECTS
SET TOUCHED = 1
WHERE ID IN (SELECT PJ_ID
FROM PROJECT_ROLES_GROUPS
WHERE GRP_ID = :OLD.GRP_ID);
END;
现在这些触发器可以正常工作几次,但之后会引发错误
ORA-01013: user requested cancel of current operation
ORA-06512: at "MARK", line 3
ORA-04088: error during execution of trigger 'MARK'
通过执行手动插入和删除操作从SQL Developer触发触发器不会触发该错误,该错误会在执行插入和删除操作的.net应用程序中出现。
我想念什么吗?
编辑:
阅读评论后,我得到提示,问题可能出在vb.net代码中。我有:
adTrans = ADOCon.BeginTransaction()
adCMD = New OdbcCommand(vsSQL, ADOCon)
adCMD.Transaction = adTrans
Try
adCMD.ExecuteNonQuery()
adTrans.Commit() <- here is the error it should be
-> adCMD.Transaction.Commit()
Return True
Catch ex As Exception
' Try to rollback the transaction
Try
adTrans.Rollback()
If vbSuppressOutput = False Then
MsgBox(ex.Message)
End If
System.Threading.Thread.Sleep(20)
Catch
' Do nothing here; transaction is not active.
End Try
Return False
End Try
因此,我尝试使用修改后的代码,但现在无法重现该问题。非常感谢您发表评论!
问题的编辑是错误的。
正如评论所暗示的那样,问题是我没有提交使用SQL Developer完成的事务。
因此,使用VB.net应用程序完成的事务无法完成,并且产生了错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句