一个触发器的问题..

wuguanlin 2010-05-22 04:45:52
写了个触发器用sys用户登录pl/sql developer
在db_xtwh用户下写了个触发器
create or replace trigger db_xtwh.TRI_UPDATE_WHTOAH
after insert

on db_xtwh.t_xt_gnzy
for each row

begin

if inserting then
insert into db_xtwh.for_trigger(gn_dm,mc,mc_j,sjgn_dm,zn_dm,cd_an_dm,gns_lx,cd_xh,lr_sj,xg_sj) values (:new.gn_dm,:new.mc,:new.mc_j,:new.sjgn_dm,:new.zn_dm,:new.cd_an_dm,:new.gns_lx,:new.cd_xh,:new.lr_sj,:new.xg_sj);
end if ;

end db_xtwh.TRI_UPDATE_WHTOAH;


编译没报错,但是触发器的状态不对,
select owner,object_name,object_type,status from dba_objects where object_name ='TRI_UPDATE_WHTOAH';

结果中status状态时Invalid。
往表db_xtwh.t_xt_gnzy插入数据就报:ORA-04098: 触发器 'DB_XTWH.TRI_UPDATE_WHTOAH' 无效且未通过重新验证

请给点思路,谢谢。
...全文
178 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuguanlin 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 luoyoumou 的回复:]
-- declare gnzy db_xtwh.t_xt_gnzy%ROWTYPE;

-- 从定义变量来看,db_xtwh 好像是表名称!可是......?????
-- 哎:你别乱套了好不好?
[/Quote]
呵呵 我没乱。。。
是语法上的问题。谢谢你了。
wuguanlin 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 oraclemch 的回复:]
不是,最后面end的时候 不需用药DB_XTWH.
[/Quote]
感谢oraclemch兄弟远程帮我解决问题
谢谢。
luoyoumou 2010-05-22
  • 打赏
  • 举报
回复
-- declare gnzy db_xtwh.t_xt_gnzy%ROWTYPE;

-- 从定义变量来看,db_xtwh 好像是表名称!可是......?????
-- 哎:你别乱套了好不好?
vber1010 2010-05-22
  • 打赏
  • 举报
回复
楼主确定编译通过吗?我感觉没设么错误。楼主再到program window里编译一下。
oraclemch 2010-05-22
  • 打赏
  • 举报
回复
不是,最后面end的时候 不需用药DB_XTWH.
luoyoumou 2010-05-22
  • 打赏
  • 举报
回复
db_xtwh.for_trigger

-- 这个又是什么?
luoyoumou 2010-05-22
  • 打赏
  • 举报
回复
-- 你这个db_xtwh到底是用户名称还是表名称啊?
oraclemch 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 wuguanlin 的回复:]
写了个触发器用sys用户登录pl/sql developer
在db_xtwh用户下写了个触发器

SQL code
create or replace trigger db_xtwh.TRI_UPDATE_WHTOAH
after insert

on db_xtwh.t_xt_gnzy
for each row

begin

if inserting then
……
[/Quote]

进去 triger 里面 打开TRI_UPDATE_WHTOAH,编译下,看报什么错误!
wuguanlin 2010-05-22
  • 打赏
  • 举报
回复
完整的是
create or replace trigger db_xtwh.TRI_UPDATE_WHTOAH
after insert or update or delete
on db_xtwh.t_xt_gnzy
for each row
declare gnzy db_xtwh.t_xt_gnzy%ROWTYPE;
begin

if deleting then
delete from db_xtwh.for_trigger where :old.gn_dm = gn_dm;
end if ;

if inserting then
insert into db_xtwh.for_trigger(gn_dm,mc,mc_j,sjgn_dm,zn_dm,cd_an_dm,gns_lx,cd_xh,lr_sj,xg_sj) values (:new.gn_dm,:new.mc,:new.mc_j,:new.sjgn_dm,:new.zn_dm,:new.cd_an_dm,:new.gns_lx,:new.cd_xh,:new.lr_sj,:new.xg_sj);
---select * from db_xtwh.t_xt_gnzy dt where dt.gn_dm = :new.gn_dm;
end if ;

if updating then
select * into gnzy from db_xtwh.t_xt_gnzy where gn_dm = :new.gn_dm;
update db_xtwh.for_trigger set mc = gnzy.mc,mc_j = gnzy.mc_j,
sjgn_dm = gnzy.sjgn_dm,zn_dm = gnzy.zn_dm,cd_an_dm = gnzy.cd_an_dm,gns_lx = gnzy.gns_lx,
cd_xh = gnzy.cd_xh,lr_sj = gnzy.lr_sj, xg_sj = gnzy.xg_sj
where gn_dm = gnzy.gn_dm;
end if ;

end db_xtwh.TRI_UPDATE_WHTOAH;
luoyoumou 2010-05-22
  • 打赏
  • 举报
回复
-- 给个例子给你:
CREATE OR REPLACE TRIGGER IMSI2MOBILE_UserPoints_trig
AFTER INSERT OR UPDATE OR DELETE ON imsi2mobile
FOR EACH ROW
DECLARE
v_singlepoints NUMBER(18);
BEGIN
IF UPDATING THEN
UPDATE UserPoints SET mobile=:new.mobile WHERE mobile=:old.mobile;
ELSIF DELETING THEN
DELETE FROM UserPoints WHERE mobile=:old.mobile;
ELSIF INSERTING THEN
SELECT singlepoints INTO v_singlepoints FROM opera_points_map WHERE useroperamark='TO_REGISTER';
INSERT INTO UserPoints(mobile, usertype, points,grade, cdate) VALUES(:new.mobile,1,v_singlepoints,1,:new.cdate);
END IF;
END;
/
luoyoumou 2010-05-22
  • 打赏
  • 举报
回复
-- 这样试试
conn db_xtwh/passwd;

create or replace trigger TRI_UPDATE_WHTOAH
after insert on t_xt_gnzy
for each row
begin
insert into for_trigger(gn_dm,mc,mc_j,sjgn_dm,zn_dm,cd_an_dm,gns_lx,cd_xh,lr_sj,xg_sj)
values (:new.gn_dm,:new.mc,:new.mc_j,:new.sjgn_dm,:new.zn_dm,:new.cd_an_dm,:new.gns_lx,:new.cd_xh,:new.lr_sj,:new.xg_sj);
end db_xtwh.TRI_UPDATE_WHTOAH;
/
oraclemch 2010-05-22
  • 打赏
  • 举报
回复
你的写法是sqlserver的写法,不是oarcle的写法

我给你一个小例子,你试试看:

create or replace trigger tri_test
before insert on zz_test

declare
-- local variables here
begin
update A set A.c2='insert';
commit;
end tri_test;

17,377

社区成员

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

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