这个触发器的需求是当T_BUSI_PRESEND_MX表插入以后,触发update set codetype=...
由于codetype的值是需要刚插入的id来查询出来的,所以必须先得到刚插入的id的值:create or replace trigger trg_after_table
after insert
on T_BUSI_PRESEND_MX
FOR EACH ROW
declare
tr_mxid varchar2(20);
if insert(T_BUSI_PRESEND_MX)
begin
update T_BUSI_PRESEND_MX set tr_mxid=(select id from T_BUSI_PRESEND_MX,inserted),CODETYPE=fn_numbertype(tr_mxid)
where id=tr_mxid;
end;
end if;编译后 报标题错误,在线等 谢谢
由于codetype的值是需要刚插入的id来查询出来的,所以必须先得到刚插入的id的值:create or replace trigger trg_after_table
after insert
on T_BUSI_PRESEND_MX
FOR EACH ROW
declare
tr_mxid varchar2(20);
if insert(T_BUSI_PRESEND_MX)
begin
update T_BUSI_PRESEND_MX set tr_mxid=(select id from T_BUSI_PRESEND_MX,inserted),CODETYPE=fn_numbertype(tr_mxid)
where id=tr_mxid;
end;
end if;编译后 报标题错误,在线等 谢谢
解决方案 »
- 11g安装问题
- [200分]oracle中触发器中的after和before有什么区别,分别用在什么场合!还有语句级触发和行级触发有什么区别?给些实例
- 如何在ORACLE过程的游标中动态更新当前行?
- 此SQL如何优化,
- 急急急!!!请问我想创建一个每月2号早上八点三十分执行得JOB,该怎么写
- 【请问】从两个相关表update其中一个表的两个字段,效率很低,两个小时了,还没结束,为什么?(各有数据50w/10w)
- 难点sql语句,在线等待!
- oracle8i简单的触发器的编写,送分了
- 如何增加表空间的大小
- 正则表达式替换
- 在oracle中求一sql或者PROCEDURE
- oracle 存储过程 如何按顺序执行
AFTER INSERT ON T_BUSI_PRESEND_MX
FOR EACH ROW
LZ逻辑不是很清晰,代码有语法错误,试着帮你改了下
DECLARE
BEGIN
UPDATE T_BUSI_PRESEND_MX
SET TR_MXID = :NEW.ID--这个id是新记录的id, 如果要用TR_MXID栏位的话直接换掉就可以
, CODETYPE = FN_NUMBERTYPE(:NEW.TR_MXID)
WHERE ID = :NEW.TR_MXID;
EXCEPTION
WHEN OTHERS THEN
RETURN;
END;
END IF;
CREATE OR REPLACE TRIGGER TRG_AFTER_TABLE
AFTER INSERT ON T_BUSI_PRESEND_MX
FOR EACH ROW
DECLARE
BEGIN
UPDATE T_BUSI_PRESEND_MX
SET TR_MXID = :NEW.ID--这个id是新记录的id, 如果要用TR_MXID栏位的话直接换掉就可以
, CODETYPE = FN_NUMBERTYPE(:NEW.TR_MXID)
WHERE ID = :NEW.TR_MXID;
EXCEPTION
WHEN OTHERS THEN
RETURN;
END;
END IF;
提示变量 tr_mxid 已声明 但从来没有使用过
变量名最好别与字段名相同:否则,有些时候,Oracle都不知道你的where条件到底是怎么比较?where id=tr_mxid;
照这个写了 你里面没有用if 后面有end if
所以我把代码改成了这样
create or replace trigger trg_after_table
after insert
on T_BUSI_PRESEND_MX
declare
tr_mxid varchar2(20);begin
update T_BUSI_PRESEND_MX set tr_mxid=new.id,CODETYPE=fn_numbertype(tr_mxid)
where id=tr_mxid;
end;说 new id 标识符无效
sql statement ignored
insert的那一行没有commit,然后触发器又开始update
所以产生冲突