暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 触发器

askTom 2017-03-30
205

问题描述

你好,汤姆,

我在下面粘贴了一个带有错误消息的触发器时遇到了问题,您能否让我知道其他任何选择。

创建表测试 (id号,名称VARCHAR2(20),注释VARCHAR2(20));

插入测试 (ID,名称,注释) 值 (1,“ajay”,“插入”);

创建或替换触发器TEST_TRG
在测试时插入或更新或删除后
对于每一行
声明
PRAGMA自主交易;
开始

如果更新,则
更新测试集注释 = '从触发器更新' 其中ID =:NEW.ID;
提交;
如果结束;

结束;

开始
更新测试集名称 = 'AJAYRAM',注释 = 'UPDATE' 其中ID = 1;
提交;
结束;

错误报告-
ORA-00060: 在等待资源时检测到死锁
ORA-06512: 在 “BELLCAN1.TEST _ TRG”,第6行
ORA-04088: 触发器 'bellcan1.test _ TRG' 执行期间出错
ORA-06512: 在2号线
00060. 00000-“在等待资源时检测到死锁”

专家解答

你不能更新你正在触发的表 (你会得到一个变异表错误),解决这个问题是 * 绝对 * 不是一个自治事务。

在我看来,你只是想要:

CREATE OR REPLACE TRIGGER TEST_TRG 
BEFORE UPDATE ON TEST
FOR EACH ROW
BEGIN
  :New.COMMENTS :='UPDATING FROM TRIGGER';
END;
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论