• Oracle存储函数,存储过程


    一、Oracle存储函数:存储的PL/SQL语法块,完成特定的功能。
    1、语法: 函数关键字: function

    (1)创建函数

    CREATE [OR REPLACE] FUNCTION  <function name> [(param1,param2)] RETURN <datatype>  IS|AS 
         [local declarations]
    declare 
      .....
    BEGIN
      Executable Statements;
      RETURN result;
    EXCEPTION
      Exception handlers;
    END;

    (2)调用函数

    --调用
    --1.写查询调用
    select fun1 from dual;
    --2.PL/SQL语法块调用
    declare
    my_name varchar2(20);
    begin
    my_name := fun1;
    dbms_output.put_line(my_name);
    end;

    2、函数的参数模式


    (1)输入参数 in:
    --有参的函数

    create or replace function fun2(s_id number) return varchar2
    as
    t_name varchar2(20);
    begin
      select sname into t_name from stu where sid = s_id;
      return t_name;
    end;
    
    select fun2(4) from dual;

    例:输入in与输出out参数

    create or replace function fun2(t_id number,t_name out varchar2) return varchar2
    as
    begin
      select sname into t_name from stu where sid = t_id;
      return t_name;
    end;
    
    declare
    stu_name varchar2(20);
    my_name varchar2(20);
    begin
      stu_name := fun2(1,my_name);
      dbms_output.put_line(stu_name);
    end;

    (2)in out参数  

    create or replace function fun3(num1 in out number,num2 in out number) return varchar2
    as
    t_temp number;
    begin
     t_temp := num1;
     num1 := num2;
     num2 := t_temp;
     return num1 + num2;
    end;
    
    declare
     numa number := 10;
     numb number := 20;
     numc number;
    begin
     dbms_output.put_line(numa || '--'||numb);
     numc := fun3(numa,numb);
     dbms_output.put_line(numa || '--'||numb);
    end;

    注意:1、参数要为变量,定值返回时无法赋值。

       2、函数return要有返回值 就是end之前return语句,当调用函数时还需要声明一个变量接受返回值,即使没有使用。

    规范:参数v开头,如v_name,临时变量t_name (temp_name)。

    二、Oracle存储过程

    Oracle存储过程:将执行的过程存储起来就是存储过程。
    1、语法 :存储过程关键字 procedure

    CREATE [OR REPLACE] procedure <procedure name> [(param1,param2)] IS|AS 
    [local declarations]
    BEGIN
    Executable Statements;
    EXCEPTION
    Exception handlers;
    END;

    参数用法和存储函数一样
    调用:略有不同
    1.PL/SQL语法块
    2.命令行 使用 execute 命令去调用  如 execute procedure_name(param1,param2);

    三、区别

    存储过程和存储函数的区别:
    1、存储函数有返回值,存储过程没有返回值
    2、调用方式略有不同.. 函数和过程都支持 pl/sql调用
          函数支持 (select)查询直接调用 过程支持 execute 命令调用
    3、存储过程是否可以代替存储函数? 可以代替,但是兼容性问题,存储过程后出现 。之前的项目要支持。

     存储函数有时更加方便,可以直接select查询调用,

    --视图配合存储函数

    create or replace view emp_v as
    select e.*,yearsal(e.sal,e.comm) as "年薪" from emp e;
    --计算年薪的存储函数
    create or replace function yearsal(v_sal number,v_comm number) return number as
    t_year number;
    begin
    t_year := v_sal*12+nvl(v_comm,0);
    return t_year;
    end;
    美好生活
  • 相关阅读:
    DOCTYPE和namespace
    由浅入深漫谈margin属性
    checkbox的完美用户体验
    XSL 属性模板的运用
    各浏览器里默认的表单控件(form controls)
    简单form标准化实例(二):语义结构
    zindex在IE中的迷惑(二)
    最简单的清除浮动的方法
    Default style sheet for HTML 4
    PNG透明背景图片的无界应用
  • 原文地址:https://www.cnblogs.com/ssbydk/p/function_procedure.html
Copyright © 2020-2023  润新知