oracle 触发器的问题。。 80

触发器能成功创建,但是对student进行update操作的时候显示如下错误。困扰多时,求解createorreplacetriggerchangeId_before_u... 触发器能成功创建,但是对student进行update操作的时候显示如下错误。困扰多时,求解
create or replace trigger changeId_before_update
after update of studentID on student
for each row
declare
stuStudentID number;
oStuStudentID number;
begin
select studentID into stuStudentID from student where studentID=:new.studentID;
select studentID into oStuStudentID from student where studentID=:old.studentID;
update borrowRecord set studentID=stuStudentID where studentID=oStuStudentID;
commit;
end;
/

报错如下:
*
ERROR at line 1:
ORA-04091: table HOMEWORK.STUDENT is mutating, trigger/function may not see it
ORA-06512: at "HOMEWORK.CHANGEID_BEFORE_UPDATE", line 5
ORA-04088: error during execution of trigger 'HOMEWORK.CHANGEID_BEFORE_UPDATE'
展开
 我来答
前端报错
2011-05-15 · 前端开发技术分享,分析
前端报错
采纳数:1573 获赞数:7027

向TA提问 私信TA
展开全部
Quote:
“触发器中不能使用数据库事务控制语句 COMMIT; ROLLBACK, SVAEPOINT 语句;”
czqcs314
2011-05-11 · 超过10用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
create or replace trigger changeId_before_update
after update of studentID on student
for each row
begin
update borrowRecord
set studentID = :new.studentID
where studentID = :old.studentID;
commit;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
野望逐云
2011-05-19
知道答主
回答量:25
采纳率:0%
帮助的人:10.6万
展开全部
首先声明oracle变量和触发器之类的我也不太懂,不过这个问题我以前遇到过,是因为在执行触发器的时候比如说student的表的值改变了,然后就报大概是这个错
我觉得那个给变量赋值的语句能不能改成
select :new.studentID ,:old.studentID into stuStudentID,oStuStudentID from dual
我不知道对不对,你可以试试,我的意思就是给变量赋值的时候就不要涉及到student表了,
碰碰运气
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
caoding599
2011-05-25
知道答主
回答量:29
采纳率:0%
帮助的人:0
展开全部
触发器中不能使用数据库事务控制语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式