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  时机
View Code

行触发器:

--序列
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
View Code

管理触发器  

 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;
View Code

        

          

原文地址:https://www.cnblogs.com/shuaif/p/3505330.html