Oracle的自定义函数与存储过程很相似,同样可以接受用户的传递值,也可以向用户返回值,它与存储过程的不同之处在于,函数必须返回一个值,而存储过程可以不返回任何值。
语法格式:创建函数
CREATE [OR REPLACE] FUNCTION 函数名(参数1 数据类型,参数2,[IN|OUT|IN OUT] 数据类型……)RETURN 返回的数据类型IS|ASPL/SQL函数体; --里面必须要有一个RETURN子句
语法格式:删除函数
DROP FUNCTION 函数名;
Oracle 存储过程(procedure)和函数(Function)的区别:
- 返回值的区别
函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有
- 调用的区别
函数可以在查询语句中直接调用,而存储过程必须单独调用
函数一般情况下是用来计算并返回一个计算结果
而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等)
【例】创建自定义函数,输入员工编号,返回员工的姓名和工资
CREATE OR REPLACE FUNCTION FUN_EMPNO_ENAME_SAL(P_EMPNO EMP.EMPNO%TYPE,P_SAL OUT EMP.SAL%TYPE)RETURN EMP.ENAME%TYPEISV_ENAME EMP.ENAME%TYPE;BEGINSELECT ENAME,SALINTO V_ENAME,P_SALFROM EMPWHERE EMPNO = P_EMPNO;RETURN V_ENAME;END;-- 调用DECLAREV_SAL EMP.SAL%TYPE;V_ENAME EMP.ENAME%TYPE;BEGINV_ENAME := FUN_EMPNO_ENAME_SAL(7369, V_SAL); -- FUN_EMPNO_ENAME_SAL(P_EMPNO => 7369, P_SAL => V_SAL);DBMS_OUTPUT.PUT_LINE(V_ENAME);DBMS_OUTPUT.PUT_LINE(V_SAL);END;---带out 以及 in out 参数类型的自定义函数不可以直接用查询的方式调用
