函数语法:
CREATE [OR REPLACE] FUNCTION function_name
[(parameter1 [mode1] datatype1,
parameter2 [mode2] datatype2,
. . .)]
RETURN datatype
IS|AS
PL/SQL Block;
PL/SQL 块必须至少有一个RETURN语句
语法说明
参数 说明
function_name 函数的名字
parameter 一个 PL/SQL变量的名字,其值被传递到函数中
mode 参数的类型;可以是 IN、out、inout 参数 ,一般使用IN参数
datatype 参数的数据类型
RETURNdatatype RETURN 值的数据类型
PL/SQLblock 定义要由函数执行的动作的程序体
使用步骤:
1.在一个编辑器中输入CREATE FUNCTION语句的文本并且将它保存为一个SQL 脚本文件
2.运行存储源代码的脚本文件并且编译函数
3.用SHOW ERRORS查看编译错误
<span style="font-size:24px;">CREATE OR REPLACE FUNCTION get_sal (p_id IN emp.empno%TYPE)
RETURN NUMBER
IS
v_sal emp.sal%TYPE :=0;
BEGIN
SELECT sal
INTO v_sal
FROM emp
WHERE empno = p_id;
RETURN v_sal;
END get_sal;
/ </span><span style="font-size: 24pt;">
</span>
在sql*plus创建函数并调用
VARIABLE g_sal NUMBER
EXEC :g_sal := get_sal(7369)
Print g_sal
调用用户定义函数的位置
•SELECT语句的Select 列表中
•WHERE和HAVING子句的条件中
•START WITH、ORDER BY和GROUPBY子句中
•INSERT语句的VALUES子句中
•UPDATE语句的SET子句中
SELECT empno, tax(sal)
FROM emp
WHERE tax(sal)>(SELECTMAX(tax(sal))
FROM emp
WHERE deptno = 30)
ORDER BY tax(sal) DESC;
从SQL中调用函数的限制
为了从SQL 表达式中调用函数,用户定义函数必须:
•只接受IN参数
•只接受有效的SQL 数据类型,而不接受PL/SQL特殊的类型
作为参数
•返回数据类型为有效的SQL数据类型,而非PL/SQL 特殊的
类型
•在一个表上的UPDATE或DELETE语句中调用的函数不能查询及更新同一个表
•从SQL 语句中调用的函数不能包含结束事务的语句
函数删除:
DROP FUNCTION function_name
















