oracle PL/SQL高级特性
触发器:存放在数据库中,并被隐含执行的存储过程。
由触发事件,触发条件,触发操作组成。
DML触发器:指定触发器时机(before or after),触发事件(insert , delete, update),表名,触发类型,触发条件,触发操作
语句触发器:
create [or replace] trigger trigger_name timing event1 [or event2 ..] on table_name PL/SQL block; trigger_name 触发器名 event 事件 table_name 表名 timing 时机
行触发器:
--序列 create sequence seq_fc increment by 1 start with 353 --触发器 create or replace trigger tr_fc before insert on FundCompany for each row begin select to_char('K'||to_char(seq_fc.nextval,'FM00000')) into :new.companyid from dual; end seq_fc; insert into FundCompany(Name,Content,Money,State) values('龙腾集团','<CLOB>','200',0) select * from FundCompany
管理触发器
1显示触发器信息(user_triggers 数据字典):select * from user_triggers where table_name='';
2禁用触发器(暂时失败):alter trigger trigger_name disable;
3激活触发器(重新生效):alter triggertrigger_name enable;
4禁止或激活表的所有触发器:
alter table table_name disable all triggers;
alter table table_name enable all triggers;
5重新编译触发器: alter trigger trigger_name compile;
6删除触发器:drop trigger trigger_name;
程序包(是oracle 的优点)
包是用于逻辑组合相关的PL/SQL类型(索引,记录类型),PL/SQL项(游标,游标标量)和PL/SQL 子程序(过程,函数)
优点:
简化应用设计
提高应用性能
实现信息的隐藏
子程序的重载 等
包由包头和包体组成,包头也称为包规范。
包规范实际是包与应用程序之间的接口,用于定义包的公用组件(常量,变量,游标,过程,函数等)
公用组件不仅可以在包内使用也可以被其他子程序引用
包体 用于实现包头定义的过程和函数
在包体中,用户可以单独定义私有组件,只能在包内使用
--包头 create or replace package FundManager_pack is name varchar2(20):='张三'; state number(1,0):=0; procedure p_select(fid varchar2); --添加基金公司 procedure P_insertFundCompany(P_Name varchar2,P_Content clob,P_Money number,P_state number); end FundManager_pack; create or replace package body fundmanager_pack is --添加基金公司 procedure P_insertFundCompany(P_Name varchar2,P_Content clob,P_Money number,P_state number) is begin insert into FundCompany(Name,Content,Money,State) values(P_Name,P_Content,P_Money,P_state); end P_insertFundCompany; end fundmanager_pack; --添加基金公司 begin --调用 fundmanager_pack.P_insertFundCompany('鸿通','地方',5000,1); end;