这个触发器的需求是当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;编译后 报标题错误,在线等 谢谢
解决方案 »
- 一个简单的过程
- truncate
- 字符比较问题,急急!!!啊
- 为什么我这样处理异常有错误?
- 分享:数据库从入门到精通的视频学习资料
- oracle 10g 该用PL/SQL Developer 的哪个版本?
- 各位来看看初学者的一个简单问题:在哪里置在环境变量classpath?
- 请问资料库是什么东西,在oracle里面有什么用啊??
- 我的操作系统是2003server,安装oracle92时提示,不是有效的WIN32程序 :(
- (急)oracle817启动后,登陆sqlplus时,出现‘共享内存不存在’的错误,如何解决?
- 在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
所以产生冲突