Oracle触发器和程序包的基本介绍 |
一、触发器的概念1、触发器的基本概念
2、触发器的分类
二、触发器的创建
create or replace trigger<触发器名><触发时间><触发事件>on<表名>|<视图名>|<数据库名>|<模式名> [for each row] [when<条件表达式>] begin <pl/sql语句> end
1、DML触发器的创建
1、创建触发器,当对student表进行添加记录、更新记录和删除记录的时候,判断是否是工作时间段,如果不是工作时间段,不允许执行 。 create or replace trigger tri_detect before insert or update or delete --定义触发时间和触发事件 on student begin if to_char<sysdate,'HH24:MI'> not between '09:00' and '17:00'; --给出判断条件的工作时间 or to_char<sysdate,'DY','nls_date_lancuage=american'> in <'sat','sun'> then raise_application_error<-20005,'不是正常的工作时间,不能执行dml操作'>; --不符合条件,给出提示信息 end if; end; 2、在数据表student上创建触发器,当在该表上插入、删除或者更新的时候,记录操作日志 。 create or replace trigger tri_log after insert or delete or update on student --定义触发事件和触发时间 declare var_user varchar2<20>; var_action varchar2<20>; --定义局部变量 begin select distinct user into var_user from all_users; --获取用户 if inserting then --判断是否是“插入” insert into stu_log values<var_user,'插入',sysdate>; elsif deleting the --判断是否是“删除” insert into stu_log values<var_user,'删除',sysdate>; else --判断是否是“更新” insert into stu_log values<var_user,'更新',sysdate>; end if; end; 2、INSTEAD OF触发器的创建
create view test_view as select s.id,s.name,t.id,t.name from student s,teacher t where s.id=t.sid;
1、创建instead of 触发器已实现修改视图test_view中的内容 create or replace trigger tri_view instead of insert on test_view for each row declare var_row dept%rowtype; begin select * into var_row from student where id=:new.id; if sql%found then insert into student<id,name,class> values <:new.id,:new.name,:new.class>; end if; exception when no_data_found then insert into student<id,name> values<:new.id,:new.name>; insert into teacher<id,name,sid> values<:new.id,:new.name,:new.sid>; end; 3、系统触发器1、当登录或者退出的时候,向日志表中添加数据 create or replace trigger user_login after logon on database --登录触发 begin insert into user_log<user_name,login_date> values <ora_login_user,systimestamp>; end user_login; 4、触发器的禁用和启用
5、触发器的查看和删除
select trigger_name,trigger_type,table_name from user_triggers;
drop trigger 触发器名称 三、程序包1、程序包的创建
create or replace package 程序包名称 isias 类型声明 | 变量声明 | 异常声明 | 过程声明 | 函数声明 end [程序包名称]
create or replace package body 程序包名称 isias [<内部变量声明>] [过程体] [函数体] end [程序包名称] 2、程序包的删除
drop package body 程序包名称 drop package 程序包名称 四、总结这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏 。 文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了 。 到此这篇关于Oracle触发器和程序包的文章就介绍到这了,更多相关Oracle触发器和程序包内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |