Oracle:存储过程(一)
一:定义
所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
二:创建
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常
(1)无参存储过程语法
create or replace procedure NoParPro as --声明语句段,局部变量,游标的声明等等。 ; begin -- 执行语句段,具体业务逻辑。 ; exception --存储过程异常处理语段。 ; end;
(2)带参存储过程实例
create or replace procedure queryempname(sfindno emp.empno%type) as sName emp.ename%type; -- 自定义字段名 表名.字段名%type sjob emp.job%type; begin .... exception .... end;
(3)带参数存储过程含赋值方式
create or replace procedure runbyparmeters (isal in emp.sal%type, sname out varchar, sjob in out varchar) --(自定义参数名 in/out 表名.字段名%type)可以0-任意多个;IN表示输入参数OUT表示返回值参数 as icount number; --可以给字段类型自定 begin select count(*) into icount from emp where sal>isal and job=sjob; if icount=1 then .... else .... end if; exception when too_many_rows then --Oracle存储过程中要用到的标量等 DBMS_OUTPUT.PUT_LINE('返回值多于1行'); when others then DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!'); end;
三:编译及查看
(1)编译
ALTER PROCEDURE 存储过程名 COMPILE;
(2)查看
select * from all_source t where t.TYPE = 'PROCEDURE' and t.name = upper('存储过程名') order by t.line;
四:执行
(1)如果是命令窗口就用exec 存储过程名:
EXEC procedure; --procedure是存储过程名
(2)如果是PL/SQL窗口就用 begin 存储过程名 end:
begin procedure; --procedure是存储过程名 end;
(3)如果是程序中调用就用 call 存储过程名:
hibernateDao.excuteSqlUpdate("{Call proc_stuInfo()}"); //存储过程proc_stuInfo
五:删除
DROP PROCEDURE 存储过程名;