存储过程和存储函数
指存储在数据库*所有用户程序调用的子程序叫存储过程、存储函数。
创建存储过程:
用CREATE PROCEDURE命令建立存储过程和存储函数。
语法:
create [or replace] PROCEDURE 过程名(参数列表)
AS
PLSQL子程序体;
注:存储过程一般用于高度安全的系统中
例一:为所有员工涨10%的工资
创建存储过程
create or replace procedure updateSal
as
--plsql程序块
--存储过程不能有declare
create or replace procedure updateSal
as
cursor c1 is select sal,empno from emp;
emp_sal emp.sal%type;
emp_no emp.empno%type;
begin
open c1;
loop
fetch c1 into emp_sal,emp_no;
exit when c1%notfound;
update emp set sal=emp_sal*1.1 where empno=emp_no;
end loop;
close c1;
end;
调用存储过程
方式一:
SQL> begin
2 updateSal;
3 end;
4 /
方式二:
SQL> exec updateSal;
调用完成后手工提交一下
【
Commit语句:结束当前事务, 使当前事务所执行的全部修改永久化。
】
存储函数
函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。
建立存储函数的语法:
CREATE [OR REPLACE] FUNCTION 函数名(参数列表)
RETURN 函数值类型
AS
PLSQL子程序体;
例二:获取指定员工的年收入
create or replace function sumSal(emp_no number)--function(参数的值 必须有类型)
--返回值类型
return number--必须有返回值
as
--声明变量
emp_sal emp.sal%type;
emp_comm emp.comm%type;
total emp.sal%type;
begin
select sal,comm into emp_sal,emp_comm from emp where empno=emp_no;
total:=emp_sal*12+nvl(emp_comm,0);
return total;--必须返回 返回值类型一定相同
end;
调用方法
方法一:
SQL> begin
2 dbms_output.put_line(sumSal(7369));
3 end;
4 /
方法二:
declare
v_sal number;
begin
v_sal:=sumSal(7369);
dbms_output.put_line(v_sal);
end;
结果
12777.6