Oracle的自定义函数与存储过程很相似,同样可以接受用户的传递值,也可以向用户返回值,它与存储过程的不同之处在于,函数必须返回一个值,而存储过程可以不返回任何值。

    语法格式:创建函数

    1. CREATE [OR REPLACE] FUNCTION 函数名(参数1 数据类型,参数2,[IN|OUT|IN OUT] 数据类型……)
    2. RETURN 返回的数据类型
    3. IS|AS
    4. PL/SQL函数体; --里面必须要有一个RETURN子句

    语法格式:删除函数

    1. DROP FUNCTION 函数名;

    Oracle 存储过程(procedure)和函数(Function)的区别:

    1. 返回值的区别

    函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有

    1. 调用的区别

    函数可以在查询语句中直接调用,而存储过程必须单独调用

    函数一般情况下是用来计算并返回一个计算结果
    而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等)

    【例】创建自定义函数,输入员工编号,返回员工的姓名和工资

    1. CREATE OR REPLACE FUNCTION FUN_EMPNO_ENAME_SAL(P_EMPNO EMP.EMPNO%TYPE,
    2. P_SAL OUT EMP.SAL%TYPE)
    3. RETURN EMP.ENAME%TYPE
    4. IS
    5. V_ENAME EMP.ENAME%TYPE;
    6. BEGIN
    7. SELECT ENAME,SAL
    8. INTO V_ENAME,P_SAL
    9. FROM EMP
    10. WHERE EMPNO = P_EMPNO;
    11. RETURN V_ENAME;
    12. END;
    13. -- 调用
    14. DECLARE
    15. V_SAL EMP.SAL%TYPE;
    16. V_ENAME EMP.ENAME%TYPE;
    17. BEGIN
    18. V_ENAME := FUN_EMPNO_ENAME_SAL(7369, V_SAL); -- FUN_EMPNO_ENAME_SAL(P_EMPNO => 7369, P_SAL => V_SAL);
    19. DBMS_OUTPUT.PUT_LINE(V_ENAME);
    20. DBMS_OUTPUT.PUT_LINE(V_SAL);
    21. END;
    22. ---带out 以及 in out 参数类型的自定义函数不可以直接用查询的方式调用