Oracle之PL/SQL学习笔记之存储过程(六)
1. 认识存储过程
存储过程是Oracle开发者在数据转换或查询报表时最经常使用的方式之一。
1. 1. 什么是存储过程
存储过程就是存储在数据库服务器中的一段封装的一段或多端SQL语句的PL/SQL代码块。
1.2 存储过程的作用
存储过程编写相对比较复杂,但很多单位或个人都在使用它。显然这不是因为存储过程编写简单,而是因为它一系列的有点:
简化复杂的操作。存储过程可以把需要执行的多条SQL与复杂的业务逻辑封装到一个独立的单元中。
增加数据的独立性 。 利用存储过程可以把数据库基础数据和程序(或用户)隔离开来。
提高安全性(存储过程的权限设置,SQL执行的错误几率)
提高性能(一次编译)如果是普通的SQL每次都需要编译
1.3 存储过程的语法
语法格式:
create [or replace] procedure [schema.] procedure_name [([parameter_name [in|out] datatype,[parameter_name [in|out] datatype]])] --参数列表in,out 数据类型不能有长度限制 可选操作(可以没有参数) [v_name varchar2(50)] -- 声明部分,声明变量,数据类型加长度限制{is|as} --关键字begin --执行部分[exception]--例外(异常)end;
2. 存储过程的实例
2.1无参数的存储过程
实例1: 输出Hello PL/SQL
create or replace procedure helloPLSQLisbegin dbms_output.put_line('Hello PL/SQL');end;
2.2 有参数的存储过程
实例2: 根据员工编号,更新员工工资
create or replace procedure update_empSal( eNo number--员工编号 ,eSal number--新工资 )isbegin update emp set sal=eSal where empno=eNo;--跟新操作 commit;--提交事务end;
2.3 带例外处理的存储过程
案例3: 根据员工编号,查找员工,输出员工姓名,可能该员工不存在。
create or replace procedure selByEmpNo_pro( eNo number--员工编号 )isv_ename emp.ename%type;begin select ename into v_ename from emp where empno=eNo; dbms_output.put_line('雇员编号为:'||eNo||'的雇员名称为:'||v_ename); exception when no_data_found then dbms_output.put_line('雇员编号为:'||eNo||'的雇员不存在'); when too_many_rows then dbms_output.put_line('雇员编号为:'||eNo||'的雇员太多');end;
2.4 存储过程与函数的区别
Oracle中的函数与存储过程的区别: A:函数必须有返回值,而过程没有. B:函数可以单独执行.而过程必须通过execute执行. C:函数可以嵌入到SQL语句中执行.而过程不行. 其实我们可以将比较复杂的查询写成函数.然后到存储过程中去调用这些函数. Oracle中的函数与存储过程的特点: A. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 B.对于存储过程来说可以返回参数,而函数只能返回值或者表对象。 C.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
2.5 存储过程的优点