zoukankan      html  css  js  c++  java
  • oracle对象之自定义函数

    函数主要做运算,查询,不能做DML操作的(存储过程是可以的!)

    函数用来执行复杂的计算,并返回计算的结果

     注:创建函数前需要给咱们的用户开放创建函数的权限(create procedure)  create procedure: 创建存储过程/创建函数都是这个权限

    语法结构:

    create or replace FUNCTION  funname   [(parameter,...)]

           RETURN datatype

    {IS | AS}

    ..定义变量的

    begin

     < function_body >

    end funname ;

    注意:

    创建一个PL/SQL函数,只返回计算的结果值,函数不能像存储过程那样,对数据库进行操作。

    只能使用in模式参数传入参数值

    在函数的声明中,必须包括一个带有数据类型的RETURN 子句,表示函数计算后的最终返回函数的结果类型。

    在PL/SQL块中至少包括一个有效的RETURN语句,以便返回函数的最终计算结果。

    函数调用:

    plsql块内调用 并赋值

    DECLARE
       c number(2);
    BEGIN
       c := totalCustomers();
       dbms_output.put_line('Total no. of Customers: ' || c);
    END;
    /

    sql窗口调用:
    select changeda('1') from dual;

    注意;
    oracle没有boolean的数据类型,但是plqsl里是有的如果要在SQL中使用,改为1,0或'T','F'或类似方法。BOOLEAN只能在PLSQL中使用

    案例1:

    CREATE OR REPLACE FUNCTION changeda (v_str VARCHAR2)
    RETURN VARCHAR2
    RESULT_CACHE
    AS
    v_return VARCHAR2 (500);
    BEGIN
    if(v_str = '1') then
    v_return := '是';
    elsif (v_str = '2') then
    v_return :='否';
    else
    v_return := null;
    end if;
    RETURN v_return;
    END changeda;

     java调用函数

      和java调用存储过程类似。

    --建立一个返回游标
    CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS
    --动态游标
    TYPE REFCURSOR IS REF CURSOR;
    END PKG_PUB_UTILS;

    stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");
    // stmt.registerOutParameter(1, java.sql.Types.FLOAT);
    // stmt.registerOutParameter(2, java.sql.Types.CHAR);
    stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
    stmt.setString(2, in_price);
    stmt.executeUpdate();

    // 取的结果集的方式一:
    rs = ((OracleCallableStatement) stmt).getCursor(1); //游标
    // 取的结果集的方式二:
    // rs = (ResultSet) stmt.getObject(1);

    while (rs.next()) {
    ric = rs.getString(1);
    price = rs.getString(2);
    updated = rs.getString(3);
    System.out.println("ric:" + ric + ";-- price:" + price + "; --"
    + updated + "; ");
    }

  • 相关阅读:
    ES6展开运算符的10个用法
    用react脚手架新建项目
    第六章 组件 56 组件-组件中的data
    第六章 组件 55 组件-使用components定义私有组件
    第六章 组件 54 组件-创建组件的方式3
    第六章 组件 53 组件-创建组件的方式2
    第六章 组件 52 组件-创建组件的方式1
    第六章 组件 51 组件化和模块化的区别以及组件的定义方式
    第五章 动画 50 动画-transition-group中appear和tag属性的作用
    第五章 动画 49 动画-实现列表删除和删除时候的动画效果
  • 原文地址:https://www.cnblogs.com/spdboke/p/6872196.html
Copyright © 2011-2022 走看看