zoukankan      html  css  js  c++  java
  • Oracle中的存储过程,存储函数

    1.存储过程

            存储过程实际上就是一些编译好的sql语句集,而存储函数与存储过程的区别就是函数可以进行return返回,另一个规则就是:如果查询只有一个返回值或者数据那么优先用存储函数

    优点:       

    1.将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用

    2.批量处理:SQL+循环,减少流量,也就是“跑批”

    3.统一接口,确保数据的安全

    相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少


    创建存储过程语法:

            create [or replace] procedure 过程名 (参数列表) is  PLSQL子程序体;

    taps:       is也可以替换成as

    以Oracle中的emp表为例:创建名称为TestOne的存储过程输入参数 为epno,输出参数为psal,phiredate.

    create or replace procedure TestOne(epno in number,
                                                                psal out number,
                                                       phiredate out date) as
    begin
      select sal,emp.hiredate
    into psal,phiredate from emp where emp.empno=epno;

    end ;

    在sqldeveloper中调用

    set serveoutput on

    exec TestOne(7839);

    在java代码中调用原始JDBC形式

        String sql ="{call TestOne(?,?,?)}";                           //调用存储过程语法{call <procedure-name>[(<arg1>,<arg2>, ...)]}
    Connection con = this.getConnection();    //自己封装好的JDBC连接
    CallableStatement call=null;                       //CallableStatement 用来操作存储过程的接口
    call = con.prepareCall(sql);
    //对in 参数进行赋值
    call.setInt(1, 7839);
    //对out参数进行申明  两种方式获取类型 OracleTypes  还有 java.sql.types
    call.registerOutParameter(2, OracleTypes.INTEGER);
    call.registerOutParameter(3,java.sql.Types.DATE);
    call.execute();
    int sal = call.getInt(2);
    Date date = call.getDate(3);
    System.out.println(sal+"|"+date);

    2.存储函数

    函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN 子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。

    创建存储函数语法:

            create [or replace] function 函数名 (参数列表) 

            return 函数值类型            

            is  PLSQL子程序体;

    示例:输入一个员工编号,计算12个月的工资包括奖金,并返回

    create or replace function queryEmp(peno in number)
    return number
    as
    psal emp.sal%type;
    pcomm emp.comm%type;
    begin
      select sal,comm into psal,pcomm from emp where empno=peno;
      return psal*12+nvl(pcomm,0);
      end;

    在java代码中调用原始JDBC形式:

    String sql ="{?= call queryemp(?)}";          //调用函数语法 {?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
    Connection con = this.getConnection();
    CallableStatement call=null;
    call = con.prepareCall(sql);
    //对第一个?进行申明
    call.registerOutParameter(1, OracleTypes.INTEGER);
    call.setInt(2, 7839);
    call.execute();
    //获取返回的申明
    int sal = call.getInt(1);
    System.out.println(sal);



  • 相关阅读:
    【重要】攻击动作时间段判断~使用动画time比较动画length和使用一个变量数组做延迟
    角色头上冒数字
    ApplicationListener接口的生命周期
    Blender软件基本介绍(3D建模软件)
    unity中给图片换颜色
    Unity中建立文本保存数据
    UGUI脚本添加Btn回调的方法
    碰撞体速度过快穿透的问题
    Unity中的点击,长按,划动
    在对话系统中实现打字机效果
  • 原文地址:https://www.cnblogs.com/liclBlog/p/15349588.html
Copyright © 2011-2022 走看看