




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、存储过程备忘1 存储过程入门:-本例的作用:将一个变量赋值,再输出到屏幕(红字为必须结构)create or replace procedure TEST is v_details number(8); begin v_details :=1; dbms_output.put_line('stn是:'|v_details);exception when others thendbms_output.put_line('其他异常出现!');end TEST;2 两张汇总表的存储过程create or replace procedure WLRC_T_SUM is
2、begin-以下过程为删除两张汇总表中 当天之前已做过的统计数据delete from t_bnds_in_out_sum where to_char(s_date,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd'); delete from t_bnds_org_sum where to_char(s_date,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd');-插入两张汇总表:将细目表的当日数据汇总,按站名、日期、上下行将数据分别相加。 inse
3、rt into T_BNDS_IN_OUT_SUM select stn_code, s_date, train_dir, in_adm, out_adm, sum(total_cars) totalcar, sum(e_cars) ecar, sum(l_cars) lcar, sum(l_af_cars) lafcar, sum(l_no_stn_cars) lnostncar, sum(af_d_cars) afdcar, sum(af_ad_cars) afadcar, sum(af_z_cars) afzcar, sum(af_fz_cars) affzcar, sum(af_sz_
4、cars) afszcar FROM T_BNDS_IN_OUT_DETAIL WHERE to_char(s_date,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd') GROUP BY stn_code, s_date, train_dir, in_adm, out_adm; insert into T_BNDS_ORG_SUM select stn_code, s_date, train_dir, in_adm, out_adm, org_adm,dest_adm, sum(l_cars) lcar, sum(l_
5、af_cars) lafcar, sum(af_d_cars) afdcar, sum(af_ad_cars) afadcar, sum(af_z_cars) afzcar, sum(af_fz_cars) affzcar, sum(af_sz_cars) afszcar FROM T_BNDS_ORG_DEST_DETAIL WHERE to_char(s_date,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd') GROUP BY stn_code, s_date, train_dir, in_adm, out_ad
6、m,org_adm,dest_adm;-提交以前执行的过程。注意:重要! 否则直接rollback,不插入数据。 commit;-异常处理:exception when no_data_found thendbms_output.put_line('出现异常,无数据!');when others thenrollback;dbms_output.put_line('其他异常出现!');end WLRC_T_SUM;3 存储过程中的循环实例本例作用说明:存在细目表DETAILS,字段为:站代码stn统计日期sdate车次上下行标志traindir(0/1)接入局交
7、出局车总数total违流数afcar1BFF2010-12-1298765431NF4852AYF2010-12-1223456780FP5263AYF2010-12-1212345670FP5054AYF2010-12-1234567891PF5145BFF2010-12-1245678901NF49106BFF2010-12-1232112341NF522将细目表中内容按站名,统计日期,上下行进行累加统计,得出某站某天某个方向通过的车的总数及违流数。统计表sums,字段为:站代码stn统计日期sdate上下行标志traindir(0/1)车总数total违流数afcar运行以下三种循环的结
8、果sums均为:站代码stn统计日期sdate上下行标志traindir(0/1)车总数total违流数afcar1AYF2010-12-120102112BFF2010-12-121149173AYF2010-12-1215143.1 一般循环-创建ORACLE存储过程TEST,定义变量v_sqlstrcreate or replace procedure TEST is v_sqlstr varchar(1000);-定义游标c,指向从细目表中取出的按站名、日期、上下行标志汇总的车数 cursor c is SELECT stn, sdate, traindir, sum(total) t
9、otal, sum(afcar) afcar FROM DETAILS GROUP BY STN,SDATE,TRAINDIR;-定义结构体变量v_details,类型与c游标中的变量们相同 v_details c%rowtype;-开始处理过程:将本日之前的汇总记录删除,打开游标开始循环,将游标中的数放入结构体变量中-再将游标中的数插入sums表中,执行提交,关闭游标。BEGIN delete from sums where to_char(sdate,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd');- delete
10、 from sums where to_char(sdate,'yyyy-mm-dd') = to_char(to_date('2010-12-09','yyyy-mm-dd'),'yyyy-mm-dd');-删除某日期的记录 OPEN C; LOOP FETCH c INTO v_details; EXIT WHEN c%NOTFOUND;- v_sqlstr:='insert into sums (stn,sdate,traindir,total,afcar) ' |'values (''
11、;'|v_details.stn|''','''|v_details.sdate|''', '''|v_details.traindir|''','''|v_details.total|''', '''|v_details.afcar|''')' EXECUTE immediate v_sqlstr; commit;-or-另一种插入写法,此方法不用定义v_sqls
12、tr- insert into sums (stn,sdate,traindir,total,afcar) values (v_details.stn,v_details.sdate, v_details.traindir,v_details.total, v_details.afcar); commit;- END LOOP;CLOSE c;3.2 WHILE循环create or replace procedure TEST is cursor c is SELECT stn, sdate, traindir, sum(total) total, sum(afcar) afcar FROM
13、 DETAILS GROUP BY STN,SDATE,TRAINDIR;v_details c%rowtype;BEGIN delete from sums where to_char(sdate,'yyyy-mm-dd') = to_char(to_date('2010-12-12','yyyy-mm-dd'),'yyyy-mm-dd'); OPEN c; FETCH c INTO v_details; WHILE c%FOUND LOOP insert into sums (stn,sdate,traindir,total,
14、afcar) values (v_details.stn,v_details.sdate, v_details.traindir,v_details.total, v_details.afcar); COMMIT; FETCH C INTO v_details; END LOOP;CLOSE c;EXCEPTION when no_data_found thendbms_output.put_line('出现异常,无数据!');when others thendbms_output.put_line('其他异常出现!');end TEST;3.3 FOR循环用法
15、create or replace procedure TEST is cursor c is select stn, sdate, traindir, sum(total) total, sum(afcar) afcar FROM DETAILS GROUP BY STN,SDATE,TRAINDIR; v_details c%rowtype;BEGIN delete from sums where to_char(sdate,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd'); FOR v_details IN c L
16、OOP insert into sums (stn,sdate,traindir,total,afcar) values (v_details.stn,v_details.sdate, v_details.traindir,v_details.total, v_details.afcar); commit; END LOOP; exception when no_data_found thendbms_output.put_line('出现异常,无数据!');when others thendbms_output.put_line('其他异常出现!');roll
17、back;end TEST;-另一种写法,不定义游标-create or replace procedure TEST isBEGIN delete from sums where to_char(sdate,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd'); FOR v_details IN (select stn, sdate, traindir, sum(total) total, sum(afcar) afcar FROM DETAILS GROUP BY STN,SDATE,TRAINDIR) LOOP insert into sums (stn,sdate,traindir,total,afcar) values (v_details.stn,v_details.sdate, v_details.traindir,v_details.total, v_details.afcar); commit; END LOOP;end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年项目经理劳动合同范本
- 2025代理销售合同协议书范本
- 2025年租店转让合同协议书
- 2025合同解除协议书范本
- 《2025光伏电站用工试用合同》
- 2025租赁合同范文大全
- 2025版房产借款合同书范本
- 2025承租方安全生产责任合同
- 2025沉井钻孔混凝土灌注桩施工承包合同
- 《心脑血管肿瘤》课件
- 湖南省长沙市实验小学小学语文五年级下册期末试卷(含答案)
- 短引线保护引出线保护以及T区保护
- 完美公司玛丽艳美的观念
- 硫酸生产技术 二氧化硫催化氧化的化学平衡及动力学
- 浙摄影版(2020)信息技术三年级上册第一课认识计算机(课件)
- 第七讲-信息技术与大数据伦理问题-副本
- 校园安全常识测试题卷
- 建筑用玻璃ccc标准
- 新版PFMEA自动判定
- 第一课中国人民站起来了
- 眼科门诊病历
评论
0/150
提交评论