之前发了帖子
有表table如下:
id name code element version
1 aa 11 ee 0
2 bb 22 ee 0
现在想做到:在新增,修改表中的id,name 等值的时候,那条数据的version字段每修改一次+1
新的需求是,version字段每次都要取表中的最大值+1
create or replace trigger trig_pubtable
before insert or update on t_pubtable
for each row
declare
versions t_pubtable.version%type default 0;begin
select max(version) into versions from t_pubtable;
:NEW.version := versions+1;END;
如上的存储过程,语法上找不出问题,但是执行的时候那条select 语句那里过不去,也没有提示具体原因
头疼,我用的oracle10g,不知道和版本有没有关系
再麻烦大家了
有表table如下:
id name code element version
1 aa 11 ee 0
2 bb 22 ee 0
现在想做到:在新增,修改表中的id,name 等值的时候,那条数据的version字段每修改一次+1
新的需求是,version字段每次都要取表中的最大值+1
create or replace trigger trig_pubtable
before insert or update on t_pubtable
for each row
declare
versions t_pubtable.version%type default 0;begin
select max(version) into versions from t_pubtable;
:NEW.version := versions+1;END;
如上的存储过程,语法上找不出问题,但是执行的时候那条select 语句那里过不去,也没有提示具体原因
头疼,我用的oracle10g,不知道和版本有没有关系
再麻烦大家了
但是更新语句,一更新就出错:提法ora-04098
这样子的触发器达不到触发的效果!
DROP TRIGGER EM.TRI_EMS_BOX_AF_INS;CREATE OR REPLACE TRIGGER EM."TRI_EMS_BOX_AF_INS" AFTER
INSERT ON "EM"."EMS_BOX" FOR EACH ROW
DECLARE
VN_TASK_ID NUMBER;
BEGIN
VN_TASK_ID := 0;
SELECT KEY_SEQ_NUM INTO VN_TASK_ID FROM CANP.TABLE_KEY_SEQ WHERE T_NAME='EMS_BOX_TA';
VN_TASK_ID := VN_TASK_ID + 1;
INSERT INTO EM.EMS_BOX_TA(TASK_ID, BOX_ID, BOX_CODE, TASK_TYPE, REFE_TYPE, MODI_STAT, PURPOSE, REWORK, REWORK_STAT) VALUES(VN_TASK_ID, :NEW.BOX_ID, :NEW.BOX_CODE, 'BOXINST', 'E', '0', 'A', 'N', 0);
UPDATE CANP.TABLE_KEY_SEQ SET KEY_SEQ_NUM = VN_TASK_ID WHERE T_NAME='EMS_BOX_TA';
END;
insert into table(session) values(变量)
before insert or update on t_pubtable
for each row
declare
PRAGMA AUTONOMOUS_TRANSACTION;
versions t_pubtable.version%type default 0;
begin
select max(version) into versions from t_pubtable;
:NEW.version := versions+1; END;
/
是不能在这里使用任何对该表进行查询 修改,添加和删除的动作的。
用PRAGMA AUTONOMOUS_TRANSACTION; 自制事务是一种方法,