1 概述
存储过程是数据库中的一个重要对象,是一组为了完成特定功能的sql语句集(子程序)。经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。
2 存储过程的创建和调用
2.1 存储过程的创建
create [or replace] procedure 存储过程名[参数]
is|as 声明部分
begin
pl/sql程序体
end;
- or replace 可选,表示的意义是如果不存在就创建,存在就替换。
- 参数 可选,分为输入参数和输出参数。
示例:
create procedure sayhello
is
begin
dbms_output.put_line(‘hello’);
end;
2.2 存储过程的调用
(1)直接执行 execute 存储过程名();
调用上边创建的sayhello存储过程
execute sayhello();
(2)在pl/sql块中调用 begin 存储过程名() end;
begin
sayhello();
end;
示例:带in参数的存储过程
为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水
1、创建一个带参数的存储过程:
给执行的员工涨100块钱的工资,并且打印涨前和涨后的薪水
create or replace procedure raisesalary(eno in number)
as
--定义一个变量保存涨前的薪水
psal emp.sal%type;
begin
--得到员工涨前的薪水
select sal into psal from emp where empno=eno;
--给该员工涨100
update emp set sal=sal+100 where empno=eno;
--一般不在存储过程中,commit和rollback
dbms_output.put_line('涨前:'||psal||'涨后:'(psal+100))
end;
2、如何调用:
begin
raisesalary(7839);
raisesalary(7566);
commit;
end;
3 out参数
它是一种输出类型的参数,表示这个参数在存储过程中已经被赋值。并且这个参数值可以传递到当前存储过程以外的环境中。关键字out位于参数名称之后。
示例:
--out参数存储过程的构建
create or replace procedure show(eno in emp.empno%type,pname out emp.ename%type,psal out emp.sal%type)
is
begin
--找出员工编号对应的姓名和工资并赋值给out参数
select ename,sal into pname,psal from emp where empno=eno;
end;
--存储过程的调用
set serveroutput on
declare
--声明变量对应out参数
ppname emp.ename%type;
ppsal emp.sal%type;
begin
show(7369,ppname,ppsal);
dbms_output.put_line(7369||'的姓名是:'||ppname||'薪水是:'||ppsal);
end;