zoukankan      html  css  js  c++  java
  • 存储过程和存储函数

    1. 存储过程

      1.1 定义

        是一组预编译的sql语句,也就是给pl/sql语句包装起来,完成一次创建任意调用的功能,相当于java中的方法。经编译之后存储在数据库中,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数的话)来执行它。

      1.2 语法

        create [or replace] procedure 存储过程名(参数名1 in/out 参数类型1,参数名2 in/out 参数类型2

        is/as

          ——声明部分

        begin

          ——业务逻辑部分

        end;

        举个栗子:给指定员工涨薪,并打印涨薪前和涨薪后的工资。

        create or replace procedure proc_updatesal(vempno in number,vnum in number)
        is
          --声明变量.记录当前工资
          vsal number;
        begin
          --查询当前的工资
          select sal into vsal from emp where empno = vempno;
          --输出涨薪前的工资
          dbms_output.put_line('涨薪前:'||vsal);
          --更新工资
          update emp set sal = vsal + vnum where empno = vempno;
          --输出涨薪后的工资
          dbms_output.put_line('涨薪后:'||(vsal+vnum));
          --提交
          commit;
        end;

    2. 存储函数

      2.1 定义

        通常存储函数是给存储过程调用的。

      2.2 语法

        create [or replace] function存储函数名(参数名1 in/out 参数类型1,参数名2 in/out 参数类型2) return 返回类型

        is/as

          ——声明部分(声明结果变量)

        begin

          ——业务逻辑部分

         return (结果变量);

        end;

        举个栗子:查询指定员工的年薪。

        create or replace function func_getsal(vempno number) return number
        is
          --声明变量.保存年薪
          vtotalsal number;
        begin
          select sal*12 + nvl(comm,0) into vtotalsal from emp where empno = vempno;
         return vtotalsal;
        end;

    3. 存储过程和存储函数的区别

        1.存储函数可以有返回值也可以没有返回值,存储函数不许有返回值

        2.存储过程和存储函数都可以通过输出参数out实现多个返回值

      怎么选择?

        原则上只有一个返回值用存储函数,否则用存储过程

        但是我们一般都是用存储过程,因为

          1.存储过程可以有返回值也可以没有返回值,存储的灵活性

          2.存储过程既然有返回值了,可以替代存储函数

          3.oracle新版中已经不推荐使用存储函数了

    java中通过CallableStatement调用存储过程

  • 相关阅读:
    os.environ的详解
    request.headers.get头部获取内容的缺失
    mysql根据逗号分割的字符串去关联查询另外一个表的数据
    Flask路由中使用正则表达式匹配
    Mac OS下安装mysqlclient遇到的一些坑
    【uWSGI】 listen queue of socket (fd: 3) 错误分析
    redis zset底层实现原理
    计算机网络05 传输层
    计算机网络04 网络层
    计算机网络03 数据链路层
  • 原文地址:https://www.cnblogs.com/sun7897/p/8592931.html
Copyright © 2011-2022 走看看