Oracle 存储过程实例
create or replace procedure PCREPORT is startDate DATE; --起始如期
nowTime DATE; --当前日期
nowTime2 DATE; --当前日期下限用于支持跨年
orderDate DATE; --计算时候的当前下订单日期
orderDate2 DATE; --跨年使用的日期范围下限 returns number; --退订总数
renew number; --续费总数
active number; --激活人数
noActive number; --未激活人数
activeReturn number; --激活退订人数
noActiveReturn number; --未激活退订人数
reportDateActive number; --报表时间激活的人数 tempStr varchar2(3000);
i number;
number_value number; --1.起始时间与当前时间减法,用结果做循环遍历的次数
--2.每次遍历在起始时间上加,遍历次数的月值
--3.将这个时间值作为条件,查询统计出一个统计值,将这个值插入到数据库对应的字段 begin
startDate := to_date('2009-04-01', 'yyyy-mm-dd'); /* SELECT to_char(sysdate, 'yyyy-mm-dd ') into tempStr from dual;
nowTime := to_date(tempStr, 'yyyy-mm-dd');*/ select to_date(to_char(sysdate, 'YYYYMM') || '', 'YYYY-MM-DD')
into nowTime
from dual; nowTime2 := add_months(nowTime, 1); number_value := months_between(nowTime, startDate); --月份差 i := 0;
for i in 0 .. number_value loop orderDate := add_months(startDate, i);
orderDate2 := add_months(orderDate, 1); -- 续费及激活总数的计算
select count(*)
into renew
from ord_order
where AGREE_TO_TIME between orderDate and orderDate2 --(select to_char(AGREE_TO_TIME, 'mm') from dual) =
and (end_time = to_date('1900-01-01', 'yyyy-mm-dd') or
end_time >= nowTime); --(select to_char(end_time, 'mm') from dual) >= '07'); --续费用户退订总人数
select count(*)
into returns
from ord_order
where AGREE_TO_TIME between orderDate and orderDate2 --(select to_char(AGREE_TO_TIME, 'mm') from dual) = '05'
and end_time between nowTime and nowTime2; --(select to_char(end_time, 'mm') from dual) = '07'; --续费用户激活未退订
select count(*)
into noActiveReturn
from ord_order
where AGREE_TO_TIME between orderDate and orderDate2 -- (select to_char(AGREE_TO_TIME, 'mm') from dual) = '06'
and end_time between nowTime and nowTime2 --(select to_char(end_time, 'mm') from dual) = '07'
and BECOME_EFFECTIVE_TIME < nowTime --to_date('2009-07-01', 'yyyy-mm-dd')
and BECOME_EFFECTIVE_TIME = to_date('1900-01-01', 'yyyy-mm-dd'); -- 当前报表月在个月激活的人数
select count(*)
into reportDateActive
from ord_order
where AGREE_TO_TIME between orderDate and orderDate2 --(select to_char(AGREE_TO_TIME, 'mm') from dual) = '05'
and (end_time = to_date('1900-01-01', 'yyyy-mm-dd') or
end_time >= nowTime) --(select to_char(end_time, 'mm') from dual) >= '06')
and BECOME_EFFECTIVE_TIME between nowTime and nowTime2; --(select to_char(BECOME_EFFECTIVE_TIME, 'mm') from dual) = '06'; -----------------------------之前经过校验得到正确结果---------------------
--续费用户报表月激活人数
select count(*)
into active
from ord_order
where AGREE_TO_TIME between orderDate and orderDate2 --(select to_char(AGREE_TO_TIME, 'mm') from dual) = '04'
and BECOME_EFFECTIVE_TIME != to_date('1900-01-01', 'yyyy-mm-dd')
and BECOME_EFFECTIVE_TIME < nowTime --(select to_char(BECOME_EFFECTIVE_TIME, 'mm') from dual) < '07'
and ((end_time = to_date('1900-01-01', 'yyyy-mm-dd')) or
end_time >= nowTime); --(select to_char(end_time, 'mm') from dual) >= '07'); activeReturn := returns - noActiveReturn; noActive := renew - active - reportDateActive; --做插入操作
insert into report_pc51
(REPORTDATE,
ORDERDATE,
RENEW,
RETURNS,
NOACTIVERETURN,
REPORTDATEACTIVE,
ACTIVERETURN,
ACTIVE,
NOACTIVE)
values
(nowTime,
orderDate,
renew,
returns,
noActiveReturn,
reportDateActive,
activeReturn,
active,
noActive); dbms_output.put_line(i);
end loop; COMMIT; end PCREPORT;
Oracle 存储过程实例的更多相关文章
- oracle存储过程实例
oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的P ...
- Oracle 存储过程实例2
--创建存储过程 CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p ( --参数IN表示输入参数,OUT表示输入参数,类型可以使用任意Oracle中的合法类型. is ...
- ORACLE 存储过程实例 [备忘录]
统计报表:用户登录量(平台点击量)每月月初定时任务统计前一个月的登陆次数.登陆账号数.账号总数. 使用存储过程把查询的值存储到表 RP_MONTH_CLICK 中. create or replace ...
- Oracle存储过程实例分析总结(代码)
1.存储过程结构 1.1 第一个存储过程 ? 1 2 3 4 5 6 7 8 9 10 11 12 CREATE OR REPLACE PROCEDURE proc1 ( para1 varc ...
- JAVA调用oracle存储过程实例
1.创建添加存储过程 CREATEORREPLACEPROCEDURE stu_proc(v_id INNUMBER, v_name INVARCHAR2, v_age INNUMBER) AS BE ...
- oracle存储过程的例子
oracle存储过程的例子 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的 ...
- oracle中print_table存储过程实例介绍
oracle中pro_print_table存储过程实例介绍 存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.这 ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- oracle 存储过程
来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...
随机推荐
- VB.NET 小程序 2
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...
- AI-->从新建文档开始说起,串联相关色彩知识
相关概念:AI.PS.矢量图形 AI: Adobe Illustrator 是Adobe公司出品的一款用于矢量图形设计的软件. 矢量图形:用通俗的大白话讲与分辨率无关,可以任意的放大缩小而不会失真图 ...
- C# 线程锁Lock 死锁
使用lock场景 多线程环境中,不使用lock锁,会形成竞争条件,导致错误. 使用lock 锁 可以保证当有线程操作某个共享资源时,其他线程必须等待直到当前线程完成操作. 即是多线程环境,如果一个线程 ...
- 在sql-server上建立mysql链接库
EXEC sp_addlinkedserver @server = N'RESUME_MYSQL_CONN', @srvproduct=N'MySQL ODBC 5.1 Driver', @provi ...
- WordPress 去除图片img标签的高度与宽度
要求 如,在桌面设备上,图片使用的是以下的HTML代码: 代码如下 复制代码 1 <img src="abc.png" alt="abc" width ...
- 验证证书的安装之外部用户PC
背景:使用一个域外的用户进行登录并验证 1. 用户登录浏览器下载CA证书或者证书链 2. 下载 3. 安装证书 4. ...
- C#读写日志文本文件
日志为文本文件每列以制表符隔开 行以换行符隔开 本次示例简单实现如下相关功能:1.正写日志文本 最新的日志放后面2.倒写日志文本 最新的日志放前面3.读日志文本内容显示在Label4.读日志文本内容到 ...
- Focus相关点滴
获取当前焦点所在的控件. .Net本身没有该API.必须使用Win32 API解决. internal static extern IntPtr GetFocus(); Control focused ...
- Angular2中的metadata(元数据)
@Attrubute() 从host element 中获得普通(不是@Input)属性对应的值 适用于组件嵌套或指令, 从父组件向子组件传递数据 app.component.ts import {C ...
- 4月13日学习笔记——jQuery工具函数
浏览器及特性检测 jQuery.support.boxModel 如果这个页面和浏览器是以 W3C CSS 盒式模型来渲染的,则等于 true.通常在 IE 6 和 IE 7 的怪癖模式中这个值是 f ...