存储过程是数据库对象之一,存储过程能够理解成数据库的子程序,在客户端和服务器端能够直接调用它。触发器是与表直接关联的特殊的存储过程,是在对表记录进行操做时触发的。数据库
存储过程放在字典里,能够在不一样用户和应用程序之间共享,并能够实现程序的优化和重用。缓存
存储过程的优势:安全
1.存储过程在服务器端运行,执行速度快。服务器
2.存储过程执行一次后,代码就驻留在高速缓存,在之后的操做中,只须要从高速缓存中调用已编译代码执行,提升了系统性能。函数
3.确保数据库安全。能够不受权用户直接访问应用程序中的一些表,而是受权用户执行访问这些表的存储过程,非表的受权用户除非经过存储过程,不然就不能访问这些表。性能
4.自动完成须要执行的任务,存储过程能够在系统启动时自动执行,而没必要在系统启动后再进行手工操做,大大方便了用户的使用,能够自动完成一些须要预先执行的任务。优化
SQL命令建立存储过程:spa
create or replace procedure 过程名称( 参数名称 in/out/in out 类型) is/as begin 过程体 end 过程名称
说明:code
1.过程名称:存储过程名称要符合标识符规则,而且在所属方案中必须是惟一的。关键字 or replace 表示在建立存储过程时,若是已存在同名的过程,则从新建立server
2.参数名:存储过程函数的参数名也要符合标识符规则,建立过程时,能够声明一个或多个参数,执行过程时应提供相对应的参数,存储过程的参数模式和函数参数同样,也有三种模式:in out和in out。
其中:in 表示参数是输入给过程的
out 表示参数在过程当中将被赋值,能够传给过程体的外部
in out 表示该类型的参数既能够向过程体传值,也能够在过程当中赋值
3.过程体:其中包含PL/SQL语句块
在用户的定义中不能使用下列对象建立语句:
create view
create default
create rule
create procedure
create trigger
--计算指定某门课程参加考试的学生人数。 create or replace procedure count_result(v_course in char,v_num out number) as begin select count(*) into v_num from SCHOOL_RESULT where RESULT_COURSE=v_course; end count_result;
注意:在存储过程体中,不能使用select语句直接查询,不然会出现编译错误。
经过界面建立存储过程:
存储过程的调用:
set serveroutput on; declare v_number number; begin count_result('100011',v_number); dbms_output.put_line(v_number); end;
存储过程的编辑修改:
修改存储过程和修改视图同样,也有alter procedure语句,但它是用于从新编译或验证现有过程,若是要修改过程定义,仍然应用reeate or replace procedure命令,语法格式同样。
也能够经过界面修改存储过程(在SQL Developer中"过程"右击鼠标,选择“编辑”)
存储过程的删除:
当某个过程不在须要时就应将其删除,以释放它占用的内存资源
drop procedure 过程名;