美文网首页
子程序的开发:函数

子程序的开发:函数

作者: 滴滴滴9527 | 来源:发表于2018-06-24 00:24 被阅读0次

    子程序是指被命名的PL/SQL块,这种块可以携带参数,可以在不同程序中多次调用,PL/SQL有两种类型的子程序:函数、存储过程.

    一、函数的作用、组成结构

    函数可以操作各种数据完成计算并返回特定的数据,利用函数把复杂的计算过程封装起来,避免开发人员面对复杂的算法.

    create [or replace] function function_name
    ( 
      param_desc1,
      param_desc2  
      ...
    ) 
    return datatype
    {is | as}
    
    PL/SQL块(至少要包含一条RETURN 语句)
    

    or replace:覆盖同名函数
    function_name:函数名
    param_desc:函数所需参数,有3类:输入参数(默认)(in)、输出参数(out)、输入输出参数(in out)
    datatype:返回值的数据类型
    {is | as}:二选一、两者没啥区别

    二、示例

    1、不带参数的函数
    create or replace function my_fun1
    return varchar2 
    IS
      current_time varchar2(20);
    begin
      SELECT to_char(SYSDATE,'yyyy-mm-dd') INTO current_time FROM dual;
      RETURN current_time;
    end my_fun1;
    

    函数不需要外部数据,就可以没有参数.

    2、带 in 参数的函数
    create or replace function my_fun2
    (param1 IN NUMBER,
     param2 IN NUMBER
    )
    return varchar2 
    IS
      v_result NUMBER;
    begin
      SELECT (param1 + param2) INTO v_result FROM dual;
      RETURN v_result; 
    end my_fun2;
    

    函数中需要外部数据,就需要有输入参数.

    3、带 out 参数的函数
    create or replace function my_fun3
    (param1 IN NUMBER,
     param2 IN NUMBER,
     param3 OUT NUMBER
    )
    return varchar2 
    IS
      v_result NUMBER;
    begin
      SELECT (param1 + param2) INTO v_result FROM dual;
      SELECT (param1 - param2) INTO param3 FROM dual;
      RETURN v_result;
    end my_fun3;
    

    一般情况下,函数只需要返回单个数据,当需要返回多个数据时,就需要定义输出参数.

    4、带 in out 参数的函数
    create or replace function my_fun4
    (param1 IN NUMBER,
     param2 IN OUT NUMBER
    )
    return varchar2 
    IS
      v_result NUMBER;
    begin
      SELECT (param1 + param2) INTO v_result FROM dual;
      SELECT (param1 - param2) INTO param2 FROM dual;
      RETURN v_result;
      
    end my_fun4;
    

    一个参数既是输入参数,又是输出参数,就可以定义为 in out .

    三、函数的调用

    1、不带参数的函数
    2、带 in 参数的函数

    不带参数、带 in 参的函数和Oracle内置函数一样,可以在SQL语句中调用,也可以在PL/SQL块中调用

    SQL语句中调用:
    select my_fun1 from dual;
    select my_fun2(1,2) from dual;
    
    PL/SQL块中调用:
    begin
      DBMS_OUTPUT.PUT_LINE(my_fun1);
    end;
    
    begin
      DBMS_OUTPUT.PUT_LINE(my_fun2(1,2));
    end;
    
    3、带 out 参数的函数
    4、带 in out 参数的函数

    带 out 参数、in out 参数的函数因为有输出参数,所以就不能在SQL语句中直接调用了,需要在PL/SQL块中定义变量接受OUT 参数、函数的返回值.

    DECLARE 
      param1 NUMBER := 2;
      param2 NUMBER := 1;
      param3 NUMBER;
      v_result NUMBER;
    begin
      v_result := my_fun3(param1,param2,param3);
      DBMS_OUTPUT.PUT_LINE('结果是' || v_result);
      DBMS_OUTPUT.PUT_LINE('输出参数是' || param3);
    end;
    
    
    
    DECLARE 
      param1 NUMBER := 2;
      param2 NUMBER := 1;
      v_result NUMBER;
    begin
      v_result := my_fun4(param1,param2);
      DBMS_OUTPUT.PUT_LINE('结果是' || v_result);
      DBMS_OUTPUT.PUT_LINE('输出参数是' || param2);
    end;
    

    四、函数的修改、删除

    函数的修改:使用 replace 关键字
    函数的删除:drop function function_name

    相关文章

      网友评论

          本文标题:子程序的开发:函数

          本文链接:https://www.haomeiwen.com/subject/pbwdyftx.html