小例子,方便以后查阅.

包头需要声明:   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. IOS CALayer(一)

    对于一个app的好坏,我们首要判断的便是app的界面,而界面的建立则是在图形的处理基础上的,说到图形处理又不得不提及Quartz2D,CALayer. 在iOS系统中,你能看得见摸得着的东西基本上都是 ...

  2. JSPatch一些容易犯错的地方

    JSPatch一些自己使用后的发现: 1.JS不区分整数和浮点数.解析字典以后的value不需要通过 floatValue等方法转换,而是自动就转换成对应的数据类型. 2.nil在JSPatch中 不 ...

  3. Android中有时候运行程序的时候会报错:An internal error occurred during:。。。。

    解决办法: Project -> Properties -> Run/Debug Settings: 1. select "Launching New_configuration ...

  4. InfluxDB数据备份与恢复

    数据备份与恢复 Example:(192.167.8.13 InfluxDB:DeviceHistory备份到192.167.8.52,然后恢复到该服务器上)   steps:   login 192 ...

  5. 【mysql】索引的优化

    写在前面的话 查询容易,优化不易,且写且珍惜 mysql结构 从MySQL逻辑架构来看,MySQL有三层架构,第一层连接,第二层查询解析.分析.优化.视图.缓存,第三层,存储引擎 MySQL有哪些索引 ...

  6. php 利用activeMq+stomp实现消息队列

    php 利用activeMq+stomp实现消息队列 一.activeMq概述 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J ...

  7. [转帖]迅为4412开发板最小linux系统的存储空间修改

    本文转自迅为论坛:http://www.topeetboard.com 最小linux系统的存储空间修改以修改成 1G 存储空间为例来修改,如果需要改成其他大小的存储空间,参照此方法修改即可. 首先连 ...

  8. hiveserver2 with kerberos authentication

    Kerberos协议: Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-grantin ...

  9. Learning c section 1

    #include<stdio.h> void main() { puts("hello world"); int x=4; //the %p format will p ...

  10. runv start container 流程分析

    1.runv/start.go func startContainer(context *cli.Context, container, address string, config *spec.Sp ...