有2张表,分别是专业表t_eol_pro(pro_id,pro_name,pro_state,pro_kens----知识点数量,默认为0.表示可用,1为不可用);
知识点变t_eol_ken(ken_id,ken_name,pro_id,ken_state)
当我向知识点表t_eol_ken插入一条数据的时候,专业表t_eol_pro中的pro_kens数量+1,这个触发器已经写出来了
当改变知识点状态ken_state为1的时候表示这个知识点不可用,然后专业表t_eol_pro中的pro_kens数量-1。create or replace trigger rowupdate
after update on T_EOL_KEN
REFERENCING NEW AS New OLD AS Old FOR EACH ROW
declare
old_value int;
new_value int;
upid int;
begin
if updating then
old_value:=:Old.ken_state;
new_value:=:New.ken_state;
upid:=:Old.pro_id;
end if;
if(old_value=0 and new_value=1) then
update T_EOL_PRO set T_EOL_PRO.PRO_KENS=T_EOL_PRO.PRO_KENS -1 where PRO_ID=upid;
end if;
end rowupdate;
现在遇到的问题就是 当我创建这个触发器的时候,就提示我给:new 和: old 两个变量赋值 我赋给他t_eol_ken和不赋值都提示“非法的变量名/编号 ”
我不清楚这两个变量到底赋什么值才对 或者那位高手可以提供下关于这个触发器其他写法或思路
知识点变t_eol_ken(ken_id,ken_name,pro_id,ken_state)
当我向知识点表t_eol_ken插入一条数据的时候,专业表t_eol_pro中的pro_kens数量+1,这个触发器已经写出来了
当改变知识点状态ken_state为1的时候表示这个知识点不可用,然后专业表t_eol_pro中的pro_kens数量-1。create or replace trigger rowupdate
after update on T_EOL_KEN
REFERENCING NEW AS New OLD AS Old FOR EACH ROW
declare
old_value int;
new_value int;
upid int;
begin
if updating then
old_value:=:Old.ken_state;
new_value:=:New.ken_state;
upid:=:Old.pro_id;
end if;
if(old_value=0 and new_value=1) then
update T_EOL_PRO set T_EOL_PRO.PRO_KENS=T_EOL_PRO.PRO_KENS -1 where PRO_ID=upid;
end if;
end rowupdate;
现在遇到的问题就是 当我创建这个触发器的时候,就提示我给:new 和: old 两个变量赋值 我赋给他t_eol_ken和不赋值都提示“非法的变量名/编号 ”
我不清楚这两个变量到底赋什么值才对 或者那位高手可以提供下关于这个触发器其他写法或思路
解决方案 »
- oracle如果删除不彻底会怎么样
- 请教一个instr的问题,谢谢。
- update语句
- INIT.ORA,INTENAL密码文件丢失能恢复数据吗?
- 读取嵌套表问题
- Oracle服务器莫名其妙地连不上了,从服务中看,服务还在正常运行,但是就是连不上,将服务重启后就好了,这是怎么回事?这种情况经常出现
- Oracle 在原有的数据库中新建一张表,新表的字段和另一张已经有的表完全一样。只是名字不同。大侠帮帮忙,我新手!
- 诚请大家帮助-----关于用户权限关系的问题 。不胜感激!
- 新手向各位大虾求救:启动oracle 8.1.5的server manager的问题
- 送分问题,侠客请进
- 帮忙看看这个语句是不是有问题,高手请进
- 打开CRecordSet的问题
或者NEW AS New后面那个NEW换个其它名字
去掉:new,:old的冒号或者去掉REFERENCING NEW AS New OLD AS Old
/--字段的对应LZ可以自行改一下:create or replace trigger rowupdate
after update on T_EOL_KEN
FOR EACH ROW
begin
if (:Old.ken_state = 0 and :New.ken_state = 1) then
update T_EOL_PRO
set :new.T_EOL_PRO.PRO_KENS = :old.T_EOL_PRO.PRO_KENS - 1
where :new.PRO_ID = :Old.pro_id;
end if;
end rowupdate;
create or replace trigger rowupdate
after update on T_EOL_KEN
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
begin
if (:Old.ken_state = 0 and :New.ken_state = 1) then
update T_EOL_PRO
set :new.T_EOL_PRO.PRO_KENS = :old.T_EOL_PRO.PRO_KENS - 1
where :new.PRO_ID = :Old.pro_id;
end if;
end rowupdate;
/--再试下:create or replace trigger rowupdate
after update on T_EOL_KEN
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
begin
if :New.ken_state=1 then
update T_EOL_PRO
set PRO_KENS = PRO_KENS - 1
where PRO_ID = :Old.pro_id;
end if;
end rowupdate;
当我创建这个触发器的时候,就提示我给:new 和: old 两个变量赋值 我赋给他t_eol_ken(表名)和不赋值都提示“非法的变量名/编号 ”
我不清楚这两个变量到底赋什么值才对
我是第一此接触oracle而且第一次写触发器 对:new 和:old 不是很了解