• 存储过程


    一、什么是存储过程:
         存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
          存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。其优点如下:
       1. 存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。
      2. 存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。
      3. 存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程。
      4. 像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。
      5. 存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。
     
    二、 创建存储过程:
    create [or replace] procedure 存储过程名 [(输入、输出参数、in/out模式参数)]  
    is/as  
    begin  
      sentences;  
        [exception  
         sentences;]  
    end 存储过程名;  
     
    【例1】 一个没有参数的存储过程:
    SQL>set serveroutput on
    SQL> create or replace procedure pro_no_par is
      2  begin
      3   update emp set sal=sal+800 where id=3;
      4  commit;
      5  dbms_output.put_line('工资已经调整!!');
      6  end pro_no_par;
      7  /
     
    SQL> execute pro_no_par;
        工资已经调整!!
    PL/SQL 过程已成功完成。
     
     【例2】 一个带in模式参数的存储过程( 参数的方式有三种:指定名称传递;按位置传递;混合方式传递)
     
    SQL>  set serveroutput on
    SQL>  create or replace procedure pro_in_par
      2   (var_1 in nvarchar2,
      3    var_2 in number) is
      4   begin
      5    update emp set sal=sal+var_2 where ename=var_1;
      6    commit;
      7   dbms_output.put_line(var_1 ||'的工资已经增加了'||var_2||'元!');
      8  end pro_in_par;
              9  /
           
          SQL> execute pro_in_par('Smith',1500);
         Smith的工资已经增加了1500元!
     
     
      【例3】 一个带out模式和in out模式参数存储过程
             
    SQL> create or replace procedure pro_out_par
      2  (var_1 in out number,
      3   var_2 out emp.ename%type,
      4   var_3 out emp.sal%type) is
      5  begin
      6   select ename,sal into var_2,var_3 from emp where id=var_1;
      7  end pro_out_par;
      8  /
     
    SQL>set serveroutput on
    SQL>declare
      2 ex_var_1 number;
      3 ex_var_2 emp.ename%type;
      4 ex_var_3 emp.sal%type;
      5 begin
      6   ex_var_1:=8;
      7   pro_out_par(ex_var_1,ex_var_2,ex_var_3);
      8   dbms_output.put_line('员工号为'||ex_var_1||'的员工姓名是:'||ex_var_2||'工资是:'||ex_var_3);
      9 end;
     10  /
     
        员工号为8的员工姓名是:周瑜工资是:8500
     
    三、存储过程参数说明:三种形式的参数
             1. IN 定义一个输入参数变量,用于传递参数给存储过程
           2. OUT 定义一个输出参数变量,用于从存储过程获取数据
           3. IN OUT 定义一个输入、输出参数变量,兼有以上两者的功能
     
    四、 删除存储过程
     
                  DROP PROCEDURE 存储过程名;
          例如: 
                 SQL> drop procedure pro_no_par;
                 过程已删除。
  • 相关阅读:
    Mysql千万级访问量架构
    [JAVA]《Java 核心技术》(一)
    [Linux 命令]获取当前目录下某种格式文件个数
    [项目bug收集整理3]get页面,post页面的url 参数预防问题
    [项目bug收集整理2] Map的key,如果是非内置对象,需要自己实现hashCode和equals方法
    [项目bug收集整理1]Integer 对象的相等比较
    锂电池保护原理
    (转载)mos管电压规格是什么,什么是VMOS管栅极
    (转载) MOS管区分NP沟道
    Idea中使用Lombok 编译报找不到符号
  • 原文地址:https://www.cnblogs.com/wcss/p/12078568.html
Copyright © 2020-2023  润新知