1、存储过程简单实例
CREATE
OR
REPLACE
PROCEDURE
存储过程名称 (参数in,参数out)
AS
--
变量声明,每个声明用分号结束。可以在声明的同时初始化
name varchar2(50);
age number(8) default0;
--开始逻辑运算BEGIN--业务逻辑END
2、游标实现方式、
--显式实现方式(可以实现多值)
cursor cursorVar isselect event_id, isagain, rate from call_event where sender = v_sender; -- 声明游标,select语句可以包括单引号等。beginopen cursorVar; -- 打开游标 loop
fetch cursorVar into v_event_id, v_isagain, v_rate; -- 取值 exitwhen cursorVar%notfound; --当没有记录时退出循环
dbms_output.put_line(v_event_id ||‘, ‘|| v_isagain ||‘, ‘|| v_rate);
end loop;
close cursorVar; -- 关闭游标 --游标的属性有:%FOUND,%NOTFOUNRD,%ISOPEN,%ROWCOUNT; --%FOUND:已检索到记录时,返回true --%NOTFOUNRD:检索不到记录时,返回true --%ISOPEN:游标已打开时返回true --%ROWCOUNT:代表检索的记录数,从1开始 end;
--隐式游标(可以实现查询多值)
for currow in (
select t.col1, t.col2
from tableName t
where ...
) loop
if currow.col1 =0thenreturn; -- 中止sp,返回 endif;
end loop;
--带参数的游标(可以实现查询多值)
declare
isok
integer
;
v_event_id
number(10);
v_isagain number(2);
v_rate number(2);
v_sender char(11) :=‘13800138000‘;
cursor cursorVar(p_sender varchar2) isselect event_id, isagain, rate from call_event where sender = p_sender; -- 声明游标 beginopen cursorVar(v_sender); -- 打开游标,在括号里传参。 loop
fetch cursorVar into v_event_id, v_isagain, v_rate; -- 取值 exitwhen cursorVar%notfound; --当没有记录时退出循环
dbms_output.put_line(v_event_id ||‘, ‘|| v_isagain ||‘, ‘|| v_rate);
end loop;
close cursorVar; -- 关闭游标 end;
3、异常处理
EXCEPTION
WHEN OTHERS THEN
vs_msg :=‘ERROR IN xxxxxxxxxxx_p(‘||is_ym||‘):‘||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--把当前错误记录进日志表。 INSERTINTO LOG_INFO(proc_name,error_info,op_date)
VALUES(‘xxxxxxxxxxx_p‘,vs_msg,SYSDATE);
COMMIT;
RETURN;
原文:http://www.cnblogs.com/liuyp-ken/p/5751550.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!