Oracle触发器的简单使用
2013-01-31 23:59
225 查看
2013-01-31
今天学习了点oracle,触发器的简单使用,需要解决的问题是如下,还是英文描述吧。
the triggers are perfect is change auditing.The example is of Paranoid Pam(who runs a bowling alley and have been receiving complaints about people cheating on their scores).she recently complete an oracle application to catch the cheaters.
simply say, she just want to find who and when and how change the data.
next, you will say my PL/SQL code.in the write i have use some may useful method to make it.
souce code:
代码可以放在pl/sql的sql脚本中运行,可以看到相应的结果。
今天学习了点oracle,触发器的简单使用,需要解决的问题是如下,还是英文描述吧。
the triggers are perfect is change auditing.The example is of Paranoid Pam(who runs a bowling alley and have been receiving complaints about people cheating on their scores).she recently complete an oracle application to catch the cheaters.
simply say, she just want to find who and when and how change the data.
next, you will say my PL/SQL code.in the write i have use some may useful method to make it.
souce code:
--好的创建表的方法 DECLARE TB NUMBER; BEGIN SELECT COUNT(*) INTO TB FROM TABS WHERE TABLE_NAME = 'FRAME'; IF TB <> 0 THEN EXECUTE IMMEDIATE 'DROP TABLE frame'; EXECUTE IMMEDIATE ' CREATE TABLE frame ( bowler_id number, game_id number, frame_id number, strike varchar2(1) default ''N'', spare varchar2(1) default ''N'', score number, constraint frame_pk primary key (bowler_id,game_id,frame_id) )'; DBMS_OUTPUT.PUT_LINE('存在该表已删除,并创建新的表'); ELSE EXECUTE IMMEDIATE 'CREATE TABLE frame ( bowler_id number, game_id number, frame_id number, strike varchar2(1) default ''N'', spare varchar2(1) default ''N'', score number, constraint frame_pk primary key (bowler_id,game_id,frame_id) )'; DBMS_OUTPUT.PUT_LINE('不存在该表,已创建新表'); END IF; END; --创建审计表 DECLARE TB NUMBER; BEGIN SELECT COUNT(*) INTO TB FROM TABS WHERE TABLE_NAME = 'FRAME_AUDIT'; IF TB <> 0 THEN EXECUTE IMMEDIATE 'DROP TABLE frame_audit'; EXECUTE IMMEDIATE ' CREATE TABLE frame_audit ( bowler_id NUMBER, game_id NUMBER, frame_id NUMBER, old_strike VARCHAR2(1), new_strike VARCHAR2(1), old_spare VARCHAR2(1), new_spare VARCHAR2(1), old_score VARCHAR2(1), new_score VARCHAR2(1), change_date DATE, operation VARCHAR2(6) )'; DBMS_OUTPUT.PUT_LINE('存在该表已删除,并创建新的表'); ELSE EXECUTE IMMEDIATE 'CREATE TABLE frame_audit ( bowler_id NUMBER, game_id NUMBER, frame_id NUMBER, old_strike VARCHAR2(1), new_strike VARCHAR2(1), old_spare VARCHAR2(1), new_spare VARCHAR2(1), old_score VARCHAR2(1), new_score VARCHAR2(1), change_date DATE, operation VARCHAR2(6) )'; DBMS_OUTPUT.PUT_LINE('不存在该表,已创建新表'); END IF; END; --创建触发器 CREATE OR REPLACE TRIGGER audit_frames AFTER INSERT OR UPDATE OR DELETE ON frame FOR EACH ROW BEGIN IF inserting THEN INSERT INTO frame_audit(bowler_id,game_id,frame_id, new_strike,new_spare, new_score,change_date,operation) VALUES(:new.bowler_id,:new.game_id,:new.frame_id,:new.strike,:new.spare,:new.score,SYSDATE,'insert'); ELSIF updating THEN INSERT INTO frame_audit(bowler_id,game_id,frame_id, old_strike,new_strike,old_spare,new_spare, old_score,new_score,change_date,operation) VALUES(:new.bowler_id,:new.game_id,:new.frame_id,:old.strike,:new.strike,:old.spare,:new.spare,:old.score,:new.score,SYSDATE,'update'); ELSIF deleting THEN INSERT INTO frame_audit(bowler_id,game_id,frame_id, old_strike,old_spare, old_score,change_date,operation) VALUES(:old.bowler_id,:old.game_id,:old.frame_id,:old.strike,:old.spare,:old.score,SYSDATE,'insert'); END IF; END audit_frames; --在创建之后,后来使用的时候报了一个触发器无效且未通过认证的错误 --解决办法是找到触发器-》右键查看-》找到相应的错误(insert->inserting).问题解决。 INSERT INTO frame (bowler_id,game_id,frame_id,strike) VALUES (1,2,3,'y'); SELECT * FROM frame; UPDATE frame SET strike ='N', spare = 'y' WHERE bowler_id =1 AND game_id =2 AND frame_id =3; DELETE frame WHERE bowler_id = 1; COMMIT; SELECT * FROM frame; SELECT * FROM frame_audit;
代码可以放在pl/sql的sql脚本中运行,可以看到相应的结果。
相关文章推荐
- oracle触发器的简单使用
- oracle触发器使用:after insert 与before insert的简单使用注意
- oracle触发器使用:after insert 与before insert的简单使用注意
- 简单入门的Oracle触发器使用
- oracle触发器与数据导入导出的简单使用
- (转)oracle触发器使用:after insert 与before insert的简单使用注意
- ASP之简化创建关闭记录集对象并创建使用简单的MSSQL存储过程
- vim编辑器的简单使用
- javassist 的简单使用
- github简单使用教程
- CSliderCtrl和CProgressCtrl的简单使用
- Android开发之Eclipse中使用git简单步骤
- 使用quartz+spring实现简单的可配置化的定时任务(可和数据库配套使用)
- QQ5.0的侧滑效果和viewdrawhelper的简单使用
- Java使用Jsoup简单解析页面
- 线程本地存储(Thread Local Storage, TLS)简单分析与使用
- RecyclerView简单使用
- 使用C#中的ref关键字,用2个简单例子来说明
- 关于Java配置文件properties的使用(简单易用版)