oracle触发器里根据条件触发不同的操作
如题我有这样一个表T1中有字段name和age如果name的值发生了改变我就将以前的name值和新的name值写入表N中如果age的值发生了改变我就将以前的age和新的a...
如题 我有这样一个表 T1中有字段 name 和age
如果name的值发生了改变 我就将 以前的name值和新的name值写入表N中
如果age的值发生了改变 我就将 以前的age和新的age写入到A表中
这样一个对T1表的触发器怎么写? 展开
如果name的值发生了改变 我就将 以前的name值和新的name值写入表N中
如果age的值发生了改变 我就将 以前的age和新的age写入到A表中
这样一个对T1表的触发器怎么写? 展开
3个回答
展开全部
CREATE OR REPLACE TRIGGER TRI_T1
AFTER UPDATE ON t1
FOR EACH ROW
BEGIN
IF :OLD.name<>:NEW.nameTHEN
insert into N values(:OLD.name,:NEW.name);
END IF;
IF :OLD.age<>:NEW.age THEN
insert into A values(:OLD.age,:NEW.age);
END IF;
END;
/
AFTER UPDATE ON t1
FOR EACH ROW
BEGIN
IF :OLD.name<>:NEW.nameTHEN
insert into N values(:OLD.name,:NEW.name);
END IF;
IF :OLD.age<>:NEW.age THEN
insert into A values(:OLD.age,:NEW.age);
END IF;
END;
/
展开全部
1、你的建表文中还是?
还是我按照和理解了。
2、修改如下
CREATE OR REPLACE TRIGGER NAME_STUCLANAME
BEFORE INSERT ON STUDENT
FOR EACH ROW
DECLARE
TEMPCLANAME VARCHAR(10);
BEGIN
TEMPCLANAME := NULL;
SELECT CLANAME INTO TEMPCLANAME FROM CLASS WHERE CLANO =SUBSTR(:NEW.STUNO,1,8);
IF TEMPCLANAME IS NOT NULL THEN
:NEW.STUCLANAME:=TEMPCLANAME;
ELSE
RAISE_APPLICATION_ERROR(-20001, '您插入的[班级编号]在[班级表]中不存在');
END IF;
END;
/
---
以上,希望对你有所帮助。
还是我按照和理解了。
2、修改如下
CREATE OR REPLACE TRIGGER NAME_STUCLANAME
BEFORE INSERT ON STUDENT
FOR EACH ROW
DECLARE
TEMPCLANAME VARCHAR(10);
BEGIN
TEMPCLANAME := NULL;
SELECT CLANAME INTO TEMPCLANAME FROM CLASS WHERE CLANO =SUBSTR(:NEW.STUNO,1,8);
IF TEMPCLANAME IS NOT NULL THEN
:NEW.STUCLANAME:=TEMPCLANAME;
ELSE
RAISE_APPLICATION_ERROR(-20001, '您插入的[班级编号]在[班级表]中不存在');
END IF;
END;
/
---
以上,希望对你有所帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
学习了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询