ORACLE触发器无效且未通过重新验证,急!!在线等……

CoderPrince 2015-10-14 08:35:11
我想在 savings_type 表插入数据的时候用触发器自动往里面插入主键值,也是自增列。表结构如下:


序列:


触发器:


错误提示:


插入语句:INSERT INTO savings_type(savings_name) VALUES('活期');

拜托了。小弟刚学ORACLE很菜。
...全文
9506 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2015-10-15
  • 打赏
  • 举报
回复
改成 before 的。
蓝色蛋饼 2015-10-15
  • 打赏
  • 举报
回复
你这触发器 after好像不行吧 编译提示错误 (ora-04084 无法更改此触发类型的NEW值) 既然是after ,那NEW.saving_id 已经写完了 你再into 修改不行吧
create or replace trigger tri_savings_type
--before 
  before insert on savings_type
  for each row
begin
  select seq_saving_type.nextval into :new.saving_id from dual;
end;
CoderPrince 2015-10-15
  • 打赏
  • 举报
回复
引用 2 楼 dd215130268 的回复:
你这触发器 after好像不行吧 编译提示错误 (ora-04084 无法更改此触发类型的NEW值) 既然是after ,那NEW.saving_id 已经写完了 你再into 修改不行吧
create or replace trigger tri_savings_type
--before 
  before insert on savings_type
  for each row
begin
  select seq_saving_type.nextval into :new.saving_id from dual;
end;
不知道,这个触发器用AFTER可以,数据能正常插入,但是我还有一个表,用的另外一个序列,我在那个表的触发器里面写AFTER就不行,百度搜了,没怎么看懂原因。 该成BEFOR就好了。
beyon2008 2015-10-15
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER tri_saving_type BEFORE INSERT ON savings_type FOR EACH ROW DECLARE INTEGRITY_ERROR EXCEPTION; ERRNO INTEGER; ERRMSG CHAR(200); DUMMY INTEGER; FOUND BOOLEAN; BEGIN SELECT seq_savings_type.NEXTVAL INTO :NEW.savings_id FROM DUAL; -- ERRORS HANDLING EXCEPTION WHEN INTEGRITY_ERROR THEN RAISE_APPLICATION_ERROR(ERRNO, ERRMSG); END;
CoderPrince 2015-10-14
  • 打赏
  • 举报
回复
我晕死。。找到原因了,是因为我的序列没有执行。。。触发器报错说没有找到那个序列。。。。。 难怪没有人回帖,这代码没有错额。。来个人回复一下,我就给分结贴了。。。。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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