函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句。而在函数体内必须包含return语句返回的数据。可以将经常需要进行的计算写成函数.函数的调用是表达式的一部分,而过程的调用是一条PL/SQL语句.
[b]语法:[/b]
说明:
命名规范:fun_myname
参数声明:参数名,输入输出属性,数据类型。
create or replace 函数已经存在,就replace。
return type 声明返回数据类型。
无异常部分
--输入雇员的姓名,返回该雇员的年薪
如果函数创建过程有编译错误,可以使用show error;
调用:
1.在sqlplus中调用函数
----1. 位置表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(2,4,5));
END;
----2. 命名表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));
END;
----3. 混合使用位置表示法和命名表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));
END;
----4. 排除表示法
BEGIN
dbms_output.put_line(add_three_numbers(12,c=>2));
END;
2.同样我们可以在sql中调用该函数
select annual_income('SCOTT') from dual;
这样可以通过rs.getInt(1)得到返回的结果。
查看 select text from user_source where name = 'GET_SALARY_BY_DEPTNO' (函数名大写)
删除 drop function get_salary_by_deptno;
[b]函数和过程比较:[/b]
从语法角度:函数需要返回类型,并且执行代码中必须有return语句,
与过程相比,函数无异常处理部分,
从使用角度,函数注重数学运算,同时也注重运算结果。使用是一般要用某个变量接受函数返回值,过程是通过具有输出属性的参数,向外面传数据。
如果是PROCEDURE的话我在SQL/PLUS中可以通过EXECUTE就可以执行该PROCEDURE来查看该运行的结果,
如果是FUNCTINON的话是SELECT FUNCHTION NAME FROM DUAL
[b]语法:[/b]
create [or replace] function fun_name ([para_name [in | out | in out) type, [para_name [in | out | in out) type[, ….]])
return type
is | as
声明部分
Begin
执行部分
end fun_name;
说明:
命名规范:fun_myname
参数声明:参数名,输入输出属性,数据类型。
create or replace 函数已经存在,就replace。
return type 声明返回数据类型。
无异常部分
--输入雇员的姓名,返回该雇员的年薪
create function annual_incomec(name varchar2)
return number is
annual_salazy number(7,2);
begin
--执行部分
select sal*12+nvl(comm, 0) into annual_salazy from emp where ename=name;
return annual_salazy;
end;
如果函数创建过程有编译错误,可以使用show error;
调用:
1.在sqlplus中调用函数
var income number
call annual_incomec('scott') into: income;
print income
var income number
call annual_incomec('scott') into: income;
print income
declare
n number(10);
begin
n:= annual_incomec('scott');
----1. 位置表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(2,4,5));
END;
----2. 命名表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));
END;
----3. 混合使用位置表示法和命名表示法调用函数
BEGIN
dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));
END;
----4. 排除表示法
BEGIN
dbms_output.put_line(add_three_numbers(12,c=>2));
END;
2.同样我们可以在sql中调用该函数
select annual_income('SCOTT') from dual;
这样可以通过rs.getInt(1)得到返回的结果。
查看 select text from user_source where name = 'GET_SALARY_BY_DEPTNO' (函数名大写)
删除 drop function get_salary_by_deptno;
[b]函数和过程比较:[/b]
从语法角度:函数需要返回类型,并且执行代码中必须有return语句,
与过程相比,函数无异常处理部分,
从使用角度,函数注重数学运算,同时也注重运算结果。使用是一般要用某个变量接受函数返回值,过程是通过具有输出属性的参数,向外面传数据。
如果是PROCEDURE的话我在SQL/PLUS中可以通过EXECUTE就可以执行该PROCEDURE来查看该运行的结果,
如果是FUNCTINON的话是SELECT FUNCHTION NAME FROM DUAL