• 存储过程和存储函数


    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调用存储过程

  • 相关阅读:
    阻塞IO与非阻塞IO
    Java 中 IO 流分为几种?BIO,NIO,AIO 有什么区别?
    linux7启动时自动启动zookeeper和Tomcat
    linux7下配置Tomcat
    背景图片变色,或者背景渐变
    Linux7版本网络配置
    linux7中jdk安装
    linux7中zookeeper的安装-依赖于jdk
    Avoided redundant navigation to current location
    Auto Fix is enabled by default. Use the single string form
  • 原文地址:https://www.cnblogs.com/sun7897/p/8592931.html
Copyright © 2020-2023  润新知