小例子,方便以后查阅.

包头需要声明:   type C_CURSOR is ref cursor;

procedure visitcount(in_date  number,
out_code out number,
out_desc out varchar2
) is
t_date number(8);
t_datepre number(8);
t_sql varchar2(2000);
t_tempcount number(8);
c_data C_CURSOR; v_cityname varchar(20);
v_visittime number(8);
v_visitcount number(8);
v_counttype number(8);
begin
if(in_date<=0) then
t_date:=to_number(trunc(sysdate)-1,'yyyymmdd');
t_datepre:=to_number(trunc(sysdate)-2,'yyyymmdd');
else
t_date:=in_date;
t_datepre:=to_number(to_char(to_date(in_date,'yyyy-mm-dd')-1,'yyyymmdd'));
end if;
--删除之前的数据
--select count(1) into t_tempcount from cn_visitcount
-- where visittime=t_date;
--if t_tempcount>0 then
delete from cn_visitcount
where visittime=t_date;
--end if; t_sql:='
select * from (
select cityname,'||t_date||' visittime,count(1) visitcount,1 counttype from
(
select
(
case
when cityid=68 then ''深圳''
when cityid=56 then ''广州''
end
)cityname,mobile,count(1) from cn_visitanalysis
where to_number(to_char(visittime,''yyyymmdd''))='||t_date||
' and (cityid=68 or cityid=56)
group by cityid,mobile
)
group by cityname';
t_sql:=t_sql||'
union all
select cityname,'||t_date||' visittime,count(1) visitcount,2 counttype from
(
select
(
case
when cityid=68 then ''深圳''
when cityid=56 then ''广州''
end
)cityname,mobile,count(1) from cn_visitanalysis
where to_number(to_char(visittime,''yyyymmdd''))='||t_date||
' and (cityid=68 or cityid=56)
and mobile not in (
select mobile from cn_visitanalysis
where to_number(to_char(visittime,''yyyymmdd''))<='||t_datepre||'
and (cityid=68 or cityid=56)
)
group by cityid,mobile
)
group by cityname)
order by cityname,visitcount desc';
--插入查询的数据
open c_data for t_sql;
loop
fetch c_data into v_cityname,v_visittime,v_visitcount,v_counttype ;
exit when c_data%notfound;
insert into cn_visitcount
(visitcountid, cityname, visitcount, visittime, counttype)
values
(seq_cn_visitcountid.nextval,v_cityname, v_visitcount, v_visittime, v_counttype);
end loop;
--备份每日的手机号
delete from cn_visitmobile where visittime=t_date;
insert into cn_visitmobile
select seq_cn_visitmobileid.nextval,mobile,cityid,visittime from
(
select mobile,cityid,to_number(to_char(visittime,'yyyymmdd')) visittime
from cn_visitanalysis
where to_number(to_char(visittime,'yyyymmdd'))=t_date
and (cityid=68 or cityid=56)
group by cityid,mobile,to_number(to_char(visittime,'yyyymmdd'))
)
commit; exception
when others then
out_desc:='sqlcode:'||sqlcode ||' err_message:' || sqlerrm;
begin
out_code:= -;
--out_description := '系统繁忙,请稍后再试!';
rollback;
--raise;
--错误日志
insert into cn_joblog(joblogid,procname,starttime,endtime,logtype,remark)
values(seq_cn_joblogid.Nextval,'fx114v01_cn_job.visitcount',sysdate,sysdate,'error',out_desc);
commit;
end
;
end visitcount;

Oracle异常处理,动态游标的更多相关文章

  1. orcle中如何使用动态游标来对变量进行赋值

    在oracle中动态游标的概念一般不常用,但有时根据客户的特殊业务,需要使用到动态游标来解决问题!在对于一条动态SQL语句而产生多条记录时,动态游标的使用将是一个很好的选择,具体参见如下在工作流项目中 ...

  2. 【Oracle】PL/SQL 显式游标、隐式游标、动态游标

    在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...

  3. oracle异常处理——ORA-01000:超出打开游标最大数

    oracle异常处理--ORA-01000:超出打开游标最大数https://www.cnblogs.com/zhaosj/p/4309352.htmlhttps://blog.csdn.net/u0 ...

  4. oracle学习笔记(二十二) REF 动态游标

    动态游标 定义语法 --声明 $cursor_name$ sys_refcursor --打开动态游标 open $cursor_name$ is 查询语句; --关闭游标 close $cursor ...

  5. oracle存储过程和游标的使用

    oracle存储过程和游标的使用 (2011-04-19 14:52:47) 转载▼ 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情 ...

  6. 【转】Oracle 执行动态语句

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...

  7. Oracle系列之游标

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 游标: 1.目的 解决“ select * ”返回空.多行记录问题 但凡select,就可能多行结果集,也就需要用游标 2.原理 多行 ...

  8. oracle超过最大游标数异常分析(转贴)

    问题描述 Oracle 使用 OPEN_CURSORS 参数指定一个会话一次最多可以打开的游标的数量.超过此数量时,Oracle 将报告 ORA-01000 错误.当此错误传播到 WebLogic S ...

  9. Oracle PL/SQL 游标

    在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...

  10. Oracle中的游标的原理和使用详解

    游标的简介 逐行处理查询结果,以编程的方式访问数据. 游标的类型: 1,隐式游标:在 PL/SQL 程序中执行DML SQL 语句时自动创建隐式游标,名字固定叫sql. 2,显式游标:显式游标用于处理 ...

随机推荐

  1. Oracle SQL Tips

    左连接的同时只输出关联表的一条记录 WITH X AS (SELECT 1 ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL ...

  2. Android获取焦点所在控件

    View vFocus=getWindow().getDecorView().findFocus(); if(vFocus instanceof EditText) { ((EditText) vFo ...

  3. AFNetworking使用方法

    官网下载2.5版本:http://afnetworking.com/ 此文章是基于AFNetworking2.5版本的,需要看AFNetworking2.0版本的请看上一篇文章:AFNetworkin ...

  4. iOS支付宝集成时遇到的问题整理(2)

    1.集成支付宝SDK编译报错#include<openssl/asn1.h>这一行  “openssl/asn1.h”file not found 解决方法:在BuildSetting 里 ...

  5. jQuery 安装方法

    在WEB中使用jQuery有两种安装(引入)方式. 1.直接下载jQuery包放置到工程中,然后用js导入的方式连接到WEB页面中 2.利用CDN的公网资源,如百度.新浪等. 访问 http://cd ...

  6. 深入剖析js命名空间函数namespace

    在看阿里员工写的开源数据库连接池的druid的源代码时,发现了其中在jquery的原代码中又定义了一个命名空间的函数:$.namespace(),其代码如下: 网址为:https://github.c ...

  7. 我的Windows核心编程——完成端口+套接字 图解

    ========================声明============================ 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本声明). 本文不定期修改完善,为 ...

  8. POI教程之第一讲:创建新工作簿, Sheet 页,创建单元格

    第一讲 Poi 简介 Apache POI 是Apache 软件基金会的开放源码函数库,Poi提供API给java程序对Microsoft Office格式档案读和写的功能. 1.创建新工作簿,并给工 ...

  9. Android 滑动效果入门篇(一)—— ViewFlipper

    ViewFilpper 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放.又ViewAnimator继承至于Frame ...

  10. Safari5及以下版本不支持Date的横杠字符串格式

    Date构造器有多种方式创建方式 一.new Date() // 当天 var date = new Date() 二.new Date(value) // value 为一个整数 var date ...