标签:
1、存储过程简单实例
CREATE OR REPLACE PROCEDURE 存储过程名称 (参数in,参数out) AS -- 变量声明,每个声明用分号结束。可以在声明的同时初始化 name varchar2(50); age number(8) default 0; --开始逻辑运算 BEGIN --业务逻辑 END
2、游标实现方式、
--显式实现方式(可以实现多值)
cursor cursorVar is select event_id, isagain, rate from call_event where sender = v_sender; -- 声明游标,select语句可以包括单引号等。 begin open cursorVar; -- 打开游标 loop fetch cursorVar into v_event_id, v_isagain, v_rate; -- 取值 exit when 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 = 0 then return; -- 中止sp,返回 end if; 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) is select event_id, isagain, rate from call_event where sender = p_sender; -- 声明游标 begin open cursorVar(v_sender); -- 打开游标,在括号里传参。 loop fetch cursorVar into v_event_id, v_isagain, v_rate; -- 取值 exit when 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; --把当前错误记录进日志表。 INSERT INTO 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