zoukankan      html  css  js  c++  java
  • Oracle基础 自定义函数

    一、函数

      函数与存储过程相似,也是数据库中存储的已命名PL-SQL程序块。函数的主要特征是它必须有一个返回值。通过return来指定函数的返回类型。在函数的任何地方可以通过return expression语句从函数返回,返回类型必须和声明的返回类型一致。

      语法:

      create [or replace] function function_name

      [(parameter_list)]

      return datatype

      {is/as}

      [local_declarations]

      begin

        executable_statements;

      [exception

        exception_handlers;]

      end;

      说明:

      function_name:函数名称。

      parameter_list:函数列表,可选。

      return 自居:指定函数的返回类型,不能指定大小。

      local_declarations:局部变量声明,可选。

      executable_statements:要执行的PL-SQL语句。

      exception_handlers:异常处理,可选。

      or repalce:是否覆盖,可选。

      例:根据员工编号获得员工薪水。  

    --根据no查询sal
    CREATE OR REPLACE FUNCTION fun_getSal(eno NUMBER)
    RETURN NUMBER   --返回类型
    AS
    v_sal emp.sal%TYPE;
    BEGIN
      SELECT sal INTO v_sal FROM emp WHERE empno = eno;
      RETURN v_sal;
      EXCEPTION
        WHEN OTHERS THEN
          raise_application_error(-20012,'该雇员不存在');
    END fun_getSal;

      调用函数:

    --调用函数,自定义异常处理
    DECLARE 
      v_sal NUMBER;
      emp_20012 EXCEPTION;
      PRAGMA EXCEPTION_INIT(emp_20012,-20012);
    BEGIN
      v_sal:=fun_getsal(7788);
      dbms_output.put_line('sal:'||v_sal);
      EXCEPTION
        WHEN emp_20012 THEN
          dbms_output.put_line('该雇员不存在');
    END;

      注意:

      1、函数参数和返回类型只声明参数,不指定大小。

      2、可执行部分至少有一条return语句。

      3、调用函数时,不能将函数作为单独的语句存在,可以作为表达式的一部分。

    二、函数和存储过程的优点:

      1、共同使用的代码可以只需要被编写一次,而被需要该代码的任何应用程序调用(.net,c++,java,也可以使DLL库)。

      2、这种几种编写、几种维护更新、大家共享的方法,简化了应用程序的开发维护,提高了效率和性能。

      3、这种模块化的方法使得一个复杂的问题、大的程序逐步简化成几个简单的、小的程序部分,进行分别编写,因此程序的结构更加清晰,简单,也容易实现。

      4、可以在各个开发者之间提供处理数据、控制流程、提示信息等方面的一致性。

      5、节省内存空间。它们以一种压缩的形式被存储在外存中,当被调用时才被放入内存进行处理。而且多个用户在调用同一个存储过程或函数时,只需要加载一次即可。

      6、提高数据的安全性和完整性。通过把一些对数据的操作方到存储过程或函数中,就可以通过是否授予用户有执行该语句的权限,来限制某些用户对数据库进行这些操作。

    三、函数和存储过程的区别:

      1、存储过程用户在数据库中完成特定操作或者任务(如插入,删除等),函数用于返回特定的数据。

      2、存储过程声明用procedure,函数用function。

      3、存储过程不需要返回类型,函数必须要返回类型。

      4、存储过程可作为独立的pl-sql执行,函数不能作为独立的plsql执行,必须作为表达式的一部分。

      5、存储过程只能通过out和in/out来返回值,函数除了可以使用out,in/out以外,还可以使用return返回值。

      6、sql语句(DML或SELECT)中不可用调用存储过程,而函数可以。

    四、适用场合:

      1、如果需要返回多个值和不返回值,就使用存储过程;如果只需要返回一个值,就使用函数。

      2、存储过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值。

      3、可以再SQL内部调用函数来完成复杂的计算问题,但不能调用存储过程。

  • 相关阅读:
    springmvc上传下载
    在线剪切
    Spring入门
    登录验证后端添加过滤器
    SpringMVC入门
    ScriptManager 以及ScriptManagerProxy在母版中使用和Service属性的使用
    GridView中如何使用CommandField删除时,弹出确认框?
    C# 测量用指定的 Font 绘制的指定字符串。(指定字符串的像素长度)
    ASP.NET AJAX 简单地过一下每个控件(ScriptManager、ScriptManagerProxy、UpdatePanel、 UpdateProgress和Timer)
    XML结构和数据导入到SQL server
  • 原文地址:https://www.cnblogs.com/zhengcheng/p/4220924.html
Copyright © 2011-2022 走看看