Oracle存储过程初学
<div id="cnblogs_post_body"> 存储过程
?IS ?BEGIN ??NULL; ?END;
存储过程创建语法:
打印信息’);
打印信息’);
vs_ym_beg??CHAR(6);??????--vs_ym_end??CHAR(6);??????--vs_ym_sn_beg?CHAR(6);?????--vs_ym_sn_end?CHAR(6);?????----定义游标 CURSOR?cur_1?IS???SELECT?。。。???FROM?。。。?????WHERE?。。。???GROUP?BY?。。。; BEGIN --用输入参数给变量赋初值,用到了
vs_ym_beg?:=?SUBSTR(is_ym,1,6);?vs_ym_end?:=?SUBSTR(is_ym,7,6);?vs_ym_sn_beg?:=?TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_beg,'yyyymm'),?-12),'yyyymm');?vs_ym_sn_end?:=?TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_end,'yyyymm');?
? ?INSERT?INTO表名(area_code,ym,CMCODE,rmb_amt,usd_amt)?SELECT?area_code,is_ym,SUM(rmb_amt)/10000,SUM(usd_amt)/10000?FROM?BGD_AREA_CM_M_BASE_T???WHERE?ym?>=?vs_ym_beg???AND?ym?<=?vs_ym_end?GROUP?BY?area_code,CMCODE;?DBMS_OUTPUT.put_line('ins--遍历游标处理后更新到表。遍历游标有几种方法,用。FOR?rec?IN?cur_1?LOOP???UPDATE?表名??SET?rmb_amt_sn?=?rec.rmb_amt_sn,usd_amt_sn?=?rec.usd_amt_sn????WHERE?area_code?=?rec.area_code????AND?CMCODE?=?rec.CMCODE????AND?ym?=?is_ym;?END?LOOP; COMMIT; --错误处理部分。 EXCEPTION ???WHEN?OTHERS?THEN???????vs_msg?:=?'ERROR?IN?xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,500);???ROLLBACK; ???--把当前错误记录进日志表。 ???INSERT?INTO?LOG_INFO(proc_name,error_info,op_date)????VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);????COMMIT;????RETURN; END;
?
0?then?
?
?
?
?
?
?(?
?Oracle? ?
该游标是
?
exit?when?cursor%NOTFOUND;??????????????--SYS_REFCURSOR?
>??average?:=?total?/?5;?
?
=====================================================================================================下面是在plsql里调用带输出参数的存储过程:
第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: *
其中USERS就是数据库中一个表。在调用的时候只要声明一个该表的ROWTYPE类型就可以了: SQL-Code: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |