oracle function学习基层:

  函数就是一个有返回值的过程。

   首先 知道oracle 使用限制:

        函数调用限制: 1、 SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数

             2、SQL只能调用带有输入参数,不能带有输出,输入输出函数

             3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)

            4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句

  创建语法:

    create or replace function 函数名称(    argu1 [mode1] datatype1, --  定义参数变量)

     return datatype --    定义返回的数据类型

  is

       begin

      数据库操作

      Return 返回的数据变量

    end;

我举一例子:

定义一个函数:此函数可以根据雇员的编号查询出雇员的年薪
  CREATE OR REPLACE FUNCTION myfun(eno emp.empno%TYPE)

  RETURN NUMBER
  IS
    rsal NUMBER ;
  BEGIN
      SELECT (sal+nvl(comm,0))*12 INTO rsal FROM emp WHERE empno=eno ;
  RETURN rsal ;
  END ;

我理解的上面意思:

   我分几块解释上面的例子:    首先创建语句不用说了  创建一个function () 名字为 :myfun;

                   (参数类型名 eno  ,参数类型 emp.empno%TYPE)  [ emp.empno%TYPE] :意思是和这个表的这个字段类型相同 这样做 可以防止在操作时出现莫名错误,定这个参数的作用 和java 的作用差不多都是 为在我们实际调用时,把实参 传到function中

               RETURN NUMBER :  /* 定义返回的数据类型 */

                IS:

               rsal NUMBER ;   /*定义一个变量 名字 rsal ,类型为NUMBER ,这个变量作用 看下面即可 */

              BEGIN:  

                SELECT (sal+nvl(comm,0))*12 INTO rsal FROM emp WHERE empno=eno ;

                /*上面的语句 就是我真正函数的主体 ,也是我写函数执行的主要逻辑

                   大概解释下:查询 年薪【 (sal+nvl(comm,0))*12】 根据 员工的编号 ;nvl(comm,0) 这是个常用函                          数意思是 如果comm 为空,则用0 代替  ,

                   INTO rsal : 这个是 将我们查询的结果 放入变量

                */

               RETURN rsal ; 返回 变量

                 END ;

执行上面定义的function:

    SELECT myfun(7369) FROM dual ; /* 不做解释*/

在写几个例子加深理解:

      写一个函数 输入一个员工名字,判断该名字在员工表中是否存在。存在返回 1,不存在返回 0
        create or replace function empfun(en emp.ename%type) return number
          is
          is_exist number;
            begin
              select count(*) into is_exist from emp where ename=upper(en);
          return is_exist;
          end;
/
       1.写一个函数,传入员工编号,返回所在部门名称
        create or replace function myfun(eno emp.empno%type) return varchar
          is
          name varchar(30);
        begin
              select d.dname into name from emp e,dept d where e.deptno = d.deptno and e.empno = eno;
            return name;
        end;
/

     2.写一个函数,传入时间,返回入职时间比这个时间早的所有员工的平均工资
          create or replace function getAvgSal(hdate emp.hiredate%type) return number
           is
           esal number;
            begin
              select avg(sal) into esal from emp where hdate>emp.hiredate;
            return esal;
            end;

最新文章

  1. VS2012 单元测试之泛型类(Generics Unit Test)
  2. libevent源码分析:eventop
  3. JavaScript返回上一页代码区别
  4. C# 非UI线程对控件的控制
  5. hive的安装步骤
  6. Hibernate学习笔记--Hibernate框架错误集合及解决
  7. 转:关于rename命令ubuntu下的用法
  8. poj3934Queue(dp)
  9. SmoOne——开源免费的企业移动OA应用,基于.Net
  10. 1019. General Palindromic Number (20)
  11. Promise使用时应注意的问题
  12. 物联网架构成长之路(7)-EMQ权限验证小结
  13. Linux下实时查看GPU状态
  14. editcap的使用
  15. POJ 3255 Roadblocks (次短路 SPFA )
  16. curl获取响应时间
  17. 在node中使用jwt签发与验证token
  18. 【bzoj2318】game with probability
  19. Sqlserver生成带数据的脚本
  20. 浙江天搜科技落棋人工智能,加速AI产业布局

热门文章

  1. 第九章 Odoo 12开发之外部 API - 集成第三方系统
  2. pytorch基础(1)
  3. Java笔记 - 输入输出流
  4. mui.fire()用法
  5. <input> type 属性
  6. hibernate离线条件查询设置or关系
  7. 一次读懂mybatis中的缓存机制
  8. tp5.1 swoole 实现异步处理
  9. [转]WPF焦点概述
  10. P1249 最大乘积