Oracle之PL/SQL学习笔记之存储过程(六)

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 helloPLSQL
is
begin
    dbms_output.put_line('Hello PL/SQL');
end;

2.2 有参数的存储过程

实例2: 根据员工编号,更新员工工资

create or replace procedure update_empSal(
       eNo number--员工编号
       ,eSal number--新工资
       )
is
begin
    update emp set sal=eSal where empno=eNo;--跟新操作
    commit;--提交事务
end;

2.3 带例外处理的存储过程

案例3: 根据员工编号,查找员工,输出员工姓名,可能该员工不存在。

create or replace procedure selByEmpNo_pro(
       eNo number--员工编号
       )
is
v_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 存储过程的优点

你可能感兴趣的:(oracle,plsql,pl/sql,procedure)