- 函数是可以返回值的命名的 PL/SQL 子程序。
- 函数的返回值类型也必须是数据库类型。
- 特点:①:带参数的函数,全是输入参数,即调用函数 ②:返回值匹配数据路类型
CREATE [OR REPLACE] FUNCTION <function name> [(param1, param2)]
RETURN <datatype>
IS|AS
[local declarations]
BEGIN
Executable Statements;
RETURN result;
EXCEPTION
Exception handlers;
END;
-- 示例
CREATE OR REPLACE FUNCTION helloworld RETURN VARCHAR2 IS
BEGIN
RETURN '朋友,您好';
END;
函数调用方法
-- 使用 PL/SQL 块
DECLARE
v_empName VARCHAR(100);
BEGIN
v_empName := helloworld();
dbms_output.put_line(v_empName);
END;
-- 使用 SQL 语句
SQL> select helloworld() from dual;--有参数
SQL> select helloworldfrom dual;--无参数
SQL> select helloworld as hello from dual;--起别名
习题1:定义函数MAX_EMP_SAL,没有参数,该函数返回所有员工薪水的最大值。
create or replace function fc_emp_sal_max return number as
v_sal emp.sal%type;
begin
select max(sal) into v_sal from emp;
return v_sal;
exception
when others then
dbms_output.put_line('查找无效');
end;
select fc_emp_sal_max from dual;
习题2:带参数
create or replace function double_number(v_x number) return number as
begin
return v_x * 2;
end;
select sal,double_number(sal) from emp;
习题3: 定义函数MATH_SUM,带两个数值参数,该函数返回两个参数的和。定义好函数后,请用此函数计算员工薪水和佣金的和
create or replace function math_sum(v_x number,v_y number) return number as
begin
return v_x+v_y;
end;
select sal, comm, math_sum(sal, nvl2(comm, comm, 0)) 薪资 from emp;
过程与函数的区别