最近项目需要使用存储过程统计一些表数据,插入到日志表等,所以对Oracle存储过程进行稍微研究,总结如下。
一、存储过程
1.存储过程是用于特定操作的pl/sql语句块
2.存储过程是预编译过的,经优化后存储在sql内存中,使用时无需再次编译,提高了使用效率;
3.存储过程的代码直接存放在数据库中,一般直接通过存储过程的名称调用,减少了网络流量,加快了系统执行效率;
二、存储过程与函数的区别
1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2.对于存储过程来说可以返回参数(output),而函数只能返回值或者表对象。
3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
三、存储过程的优点
1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的
2.允许模块化程序设计 ,程序的可移植性更强– 类似方法的复用(使用存储过程可以实现存储过程设计和编码工作的分开进行,只要将存储过程名、参数、返回信息等告诉编程人员即可);
3.提高系统安全性 – 防止SQL注入 (执行存储过程的用户要具有一定的权限才能使用存储过程)
4.减少网络流通量 – 只要传输存储过程的名称(在大批数据查询时使用存储过程分页查询比其他方式的分页要快很多)
5.在同时进行逐主、从表间的数据维护及有效性验证时,使用存储过程更加方便,可以有效的利用SQL中的事务处理机制
四、存储过程的创建
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。
(1) 创建:
CREATE[OR REPLACE]PROCEDUREprocedure_name[(parameter1[model] datatype1, parameter2 [model]datatype2..)]
IS[AS]
BEGIN
PL/SQL;
END[procedure_name];
1. parameter用于指定参数,model用于指定参数模式,datatype用于指定参数类型
2.定义存储过程的参数时,只能指定数据类型,不能指定数据长度
3. IS/AS用于开始PL/SQL代码块
4.创建存储过程时,既可以指定参数也可以不指定任何参数;
5.存储过程参数:1)输入参数IN IN用于接收调用环境的输入参数(创建存储过程时,输入参数的IN可以省略)
2)输出参数OUT OUT用于将输出数据传递到调用环境
3)输入输出参数(IN OUT)其中IN用于接收调用环境的输入参数,OUT用于将输出数据传递到调用环境
2)编译存储过程
ALTER PROCEDURE procedure_name COMPILE
3)调用存储过程(两种)
A)命令行:exec/executeprocedure_name
B)Sql窗口:
DECLARE
param1number;
param2VARCHAR2(10) := '~Hello~';
BEGIN
procedure_name(param1,param2);
END;
4)删除存储过程
DROP PROCEDURE procedure_name;
领取专属 10元无门槛券
私享最新 技术干货