Oracle实践--PL/SQL基础之触发器和程序包

PL/SQL基础之触发器和程序包

 程序包

/*

程序包:对相关存储过程,函数,变量,游标和异常等对象的封装

有声明和主体组成

优点:1.模块化;2.更轻松的应用程序设计;3.信息隐藏;4.性能更佳

*/

--程序包的声明:关键字:package is end

create or replace package my_pack
as
 procedure packageTest(v_num number);
end my_pack;--也可以是 end;
--程序包的主体
create or replace package body my_pack
as
 procedure packageTest(v_num number)
 is-- as/is不能少,符合存储过程的创建
 begin
   dbms_output.put_line(v_num);
 end;
end my_pack;

--程序包的调用

begin
 my_pack.packageTest(500);
end;

--程序包也可以只用来声明,比如声明一个ref游标

create or replace package ref_pack
is
 type ref_cur is ref cursor;
end;

触发器

/*

触发器:当特定事件出现事自动执行的存储过程,不能被显试地调用

功能:1.自动生成数据;2.自定义复杂的安全权限;3.提供审计和日志记录;4.启用复杂的业务逻辑

*/

create table deptinfo(
      deptid number primary key,
      dname varchar2(20),
      empnum number
)
create table employee(
      eid number primary key,
      ename varchar2(20),
      deptid number references deptinfo(deptid)
)

--创建触发器,关键字:trigger,after,before,on,for
each row

create or replace trigger tri_deptNum
after--有before after instead of
insert or update or delete on employee -- 对employee操作
for each row--注意别忘了 for each row
begin
 if inserting then--用ing形式
   update deptinfo set empnum = empnum +1 where deptid = :new.deptid;
 elsif updating then-- ing形式,去掉e,与英文语法一致
   update deptinfo set empnum = empnum -1 where deptid = :old.deptid;
   update deptinfo set empnum = empnum +1 where deptid = :new.deptid;
 elsif deleting then
   update deptinfo set empnum = empnum -1 where deptid = :old.deptid;
 end if;
end;

--测试触发器

select * from deptinfo;
insert into deptinfo values(1,‘长安大学‘,0);
insert into deptinfo values(2,‘helloworld‘,0);

insert into employee values(1,‘ysjain‘,1);
insert into employee values(2,‘ysjain‘,1);
insert into employee values(3,‘ysjain‘,2);
insert into employee values(4,‘ysjain‘,2);
delete from employee  where eid =1;
update employee set deptid =2 where deptid =1;
select  * from employee;

文章来源:http://blog.csdn.net/ysjian_pingcx/article/details/25744607

Oracle实践--PL/SQL基础之触发器和程序包

时间: 2024-07-31 06:42:54

Oracle实践--PL/SQL基础之触发器和程序包的相关文章

Oracle实践--PL/SQL基础之同义词和序列

PL/SQL基础入门之同义词和序列             PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 同义词: /*     同义词:现有对象的一个别名:    

Oracle实践--PL/SQL基础之表分区

PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ---------------------------------------------

Oracle实践--PL/SQL基础之代码块

PL/SQL基础入门之代码块 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 优点: 1.       支持SQL,可以使用:DML,DCL,游标控制和SQL运算符 2

Oracle实践--PL/SQL基础之游标

PL/SQL基础入门之游标 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ----------------------------------------------

Oracle实践--PL/SQL基础之视图和索引

PL/SQL基础入门之视图和索引         PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. -----------------------------------

Oracle实践--PL/SQL基础之存储过程

PL/SQL基础之存储过程 存储过程:过程是用于完成特定任务的子程序(代码的集合) /* 子程序的优点:1.模块化,将程序分解为逻辑模块: 2.可重用性,可以被任意数目的程序调用: 3,可维护性,简化维护操作: 4.安全性:通过设置权限,使数据更安全 */ --存储过程1,打印HelloWorld create or replace procedure my_pro is --用于声明一些变量 v_string varchar2(20) :='helloworld!'; begin dbms_o

Oracle实践--PL/SQL基础之函数

PL/SQL基础之函数 /* 函数:可以有返回值得命名的PL/SQL子程序,必须有返回值 关键字:function return */ --函数1 create or replace function helloworld return varchar2--指定返回类型,不能给定长度 as v_hello varchar2(50); begin v_hello :='helloworld!'; return v_hello;--不可少的return end; --函数调用方式: select h

Oracle实践--PL/SQL综合之分页存储过程

当我们查看JDK API的时候,总会发现一些类说明写着,线程安全或者线程不安全,比如说StringBuilder中,有这么一句,"将StringBuilder 的实例用于多个线程是不安全的.如果需要这样的同步,则建议使用StringBuffer. ",那么下面手动创建一个线程不安全的类,然后在多线程中使用这个类,看看有什么效果. Count.java: [java] view plaincopy public class Count { private int num; public 

PL/SQL 编程(三 )程序包和包体,触发器,视图,索引

一.程序包和包体 程序包(package):存储在数据库中的一组子程序.变量定义.在包中的子程序可以被其它程序包或子程序调用.但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序. 它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装.包类似于JAVA语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法. create or replace package stuinfo as type stucur is ref cursor; proce