<div id="cnblogs_post_body">
<div class="Section0">
存储过程
IS
BEGIN
NULL;
END;
sql语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
sql体。
sql体的开始。
sql语句表明什么事都不做,这句不能删去,因为PL/sql体中至少需要有一句;
sql体的结束
存储过程创建语法:
打印信息’);
打印信息’);
输出
函数判断是否存在该条操作记录
代码中抛异常用 raise+异常名
错误信息变量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');
删除表中特定条件的数据。
方法打印出影响的记录行数,其中用到一个系统变量sql%rowcount
sql%rowcount||' 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('inssql%rowcount||'--遍历游标处理后更新到表。遍历游标有几种方法,用。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; --错误处理部分。错误。sqlERRM错误的详细信息。 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里调用带输出参数的存储过程: