zoukankan      html  css  js  c++  java
  • oracle function学习1

    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;


  • 相关阅读:
    STL:set/multiset用法详解
    STL:list用法详解
    STL:deque用法详解
    STL:vector容器用法详解
    Axure RP chrome插件显示已损坏或者无法安装的解决方法
    怎样知道自己机器的出口网关IP(即外部IP)
    [Selenium]怎样验证页面是否有无变化
    [Selenium]刷新页面 Refresh page
    [SoapUI]怎样获取隐藏元素的文本内容Get text of hidden element
    [SoapUI]怎样从应答报文中获取某个字段的值,然后用其改写某个变量
  • 原文地址:https://www.cnblogs.com/mengyuxin/p/4997937.html
Copyright © 2011-2022 走看看