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

  • 相关阅读:
    oracle 创建视图、修改视图、删除视图、利用视图操作基本表
    FileZilla Server的安装和设置
    js网站
    图解局域网共享设置步骤
    PLSQL连接ORACLE详解
    PLSQL Developer图形化窗口创建数据库全过程
    60多个精品源码站
    日历控件
    LINQ 101例子
    SharpZipLib压缩打包多个文件
  • 原文地址:https://www.cnblogs.com/sun7897/p/8592931.html
Copyright © 2011-2022 走看看