存储过程是数据库中的一个重要对象,是一组为了完成特定功能的sql语句集(子程序)。经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。
create [or replace] procedure 存储过程名[参数] is|as 声明部分 begin pl/sql程序体 end;
or replace 可选,表示的意义是如果不存在就创建,存在就替换。参数 可选,分为输入参数和输出参数。示例: create procedure sayhello is begin dbms_output.put_line(‘hello’); end;
(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;它是一种输出类型的参数,表示这个参数在存储过程中已经被赋值。并且这个参数值可以传递到当前存储过程以外的环境中。关键字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;