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

  • 相关阅读:
    波形捕捉:(9)写入到WAV文件
    C#基础回顾:GridView全选演示
    VS.net和Reflector 图标解释
    Dot Net屏幕传输 v1.0
    C#基础回顾:用GDI+绘制验证码
    波形捕捉:(8)使用“捕捉缓冲区”
    DirectX编程:C#中利用Socket实现网络语音通信[初级版本]
    DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
    GroupingView控件 使用经验
    Dot Net下实现屏幕图像差异获取v2.0
  • 原文地址:https://www.cnblogs.com/sun7897/p/8592931.html
Copyright © 2011-2022 走看看