函数
一.函数
--命名的PL/SQL块
--能够返回值
--存储在数据库中
--能够作为表达式的一部分被调用
删除函数:
drop function function_name;
1.语法
CREATE OR REPLACE FUNCTION function_name
(parameter1 model1 datatype1,parameter2 model2 datatype2,...)
return datatype
IS/AS
PL/SQL Block;
PL/SQL块必须至少有一个return语句!!!
示例:
CREATE OR REPLACE FUNCTION GET_SAL(P_ID IN NUMBER) RETURN NUMBER IS
V_SAL NUMBER;
BEGIN
SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = P_ID;
RETURN V_SAL;
END GET_SAL;
执行函数:
DECLARE
V_EMPNO NUMBER(4) := 7654;
V_SAL NUMBER(5) := 0;
BEGIN
V_SAL := GET_SAL(V_EMPNO);
DBMS_OUTPUT.PUT_LINE(V_SAL);
END;
二.调用用户自定义函数的位置
--select 语句的select列表中
--where 和having子句的条件中
--start with,order by和group by子句中
--insert语句的values子句中
--update语句的set语句中
例:
select empno,tax(sal)
from emp
where tax(sal)>(select max(tax(sal)) from emp where deptno = 30)
order by tax(sal) desc;
三.从SQL中调用函数的限制
create or replace function dml_call_sql(p_sal number)
return number
is
begin
insert into emp(empno,ename,hiredate,job,)
values(1,'neu',SYSDATE,'manager',1000);
return (p_sal+100);
end;
update emp set sal = dml_call_sql(2000) where empno = 7369;
SQL中调用函数的限制:
--只接受in参数
--只接受有效的SQL数据类型,而不接受PL/SQL特殊的数据类型作为参数
--返回数据类型为有效地SQL数据类型,而非PL/SQL特殊的类型
--在一个表上的update或delete语句中调用函数不能查询及更新同一个表
--从SQL语句中调用的函数不能包含结束事物的语句
四.过程与函数:
--过程作为一个独立的PL/SQL语句执行,函数作为表达式的一部分调用
--过程在规格说明中不包含return子句,函数必须在规格说明中包含return子句
--过程可以返回多个值,函数必须返回单个值
--过程不用包含return语句,函数包含至少一条return语句