oracle数据库创建触发器错误

Myjust_Nico 2011-07-16 04:38:04
求助各位高人解答,触发器如下:
Create or replace Trigger trigger_NewStudent
after insert
on t_welcome_student
begin
insert into t_xsjbxx_jbxx(xh,xm,xznj,sfbs,sfzjlxm,sfzjh,xbdm,yxsh,zydm,xsbh,sfzj,sfzx,xslbdm)
select CID,NAME,GRADE,'0','01',IDCARD,(case sexname when '男' then '1' else '2'end),deptcode,specid,
(dbms_random.string('l',8)||'-8c45-11e0-8a9a-67da650471f5'),'01','01',
(case studyyears when '4'then '01'else '02'end)
from t_welcome_student
where CID not in (select xh from t_xsjbxx_jbxx);
dbms_output.put_line("4")
end trigger_NewStudent;
commit;
错误:ORA-04098:trigger 'USR_CES.TRIGGER_NEWSTUDENT' is invalid and failed re-validation
...全文
85 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cr75608859 2011-07-16
  • 打赏
  • 举报
回复
触发器 end; /就ok了吧
tangren 2011-07-16
  • 打赏
  • 举报
回复
--commit在触发器外,不是触发器一部分,没问题的,不过是多余的
CREATE OR REPLACE TRIGGER trigger_NewStudent
AFTER INSERT ON t_welcome_student
FOR EACH ROW --如果是行级触发器加上这一行,否则为语句级触发器
BEGIN
--如果引用t_welcome_student表的当前字段值,加上:new.
INSERT INTO t_xsjbxx_jbxx
(xh,
xm,
xznj,
sfbs,
sfzjlxm,
sfzjh,
xbdm,
yxsh,
zydm,
xsbh,
sfzj,
sfzx,
xslbdm)
SELECT :new.CID,
:new.NAME,
:new.GRADE,
'0',
'01',
:new.IDCARD,
(CASE :new.sexname
WHEN '男' THEN
'1'
ELSE
'2'
END),
:new.deptcode,
:new.specid,
(dbms_random.string('l', 8) || '-8c45-11e0-8a9a-67da650471f5'),
'01',
'01',
(CASE :new.studyyears
WHEN '4' THEN
'01'
ELSE
'02'
END)
FROM t_welcome_student
WHERE :new.CID NOT IN (SELECT xh FROM t_xsjbxx_jbxx);
dbms_output.put_line('4'); --这是输出'4'字符串应该是单引号,语句结束少了分号
END trigger_NewStudent;
灰哥 2011-07-16
  • 打赏
  • 举报
回复
你将commit去掉试试,因为触发器中是不允许有:commit ,rollback.等事务控制语句在里面的。
触发器也是过程级原子性,也就是说当主体语句执行失败时,触发器也会失败;
yelang 2011-07-16
  • 打赏
  • 举报
回复
commit;
触发器里不用commit;

17,381

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧