oracle 存储过程 示例

CreationTime--2018年9月4日09点49分

Author:Marydon

1.情景展示

  对VIRTUAL_QRCODELOG表的静态二维码,动态二维码,二维码总量按时间进行分组统计

  表结构展示

  存储过程入参展示

2.sql分析

要想完成这个sql需要将行转成列

  第一步:

  第二步:借助UNION ALL

--按日期统计动态二维码
SELECT TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd') TIME,
0 STATIC_CODE,
COUNT(1) DYNAMIC_CODE
FROM VIRTUAL_QRCODELOG
WHERE QR_CODE_TYPE = 0
GROUP BY TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd')
UNION ALL
--按日期统计静态二维码
SELECT TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd') TIME,
COUNT(1) STATIC_CODE,
0 DYNAMIC_CODE
FROM VIRTUAL_QRCODELOG
WHERE QR_CODE_TYPE = 1
GROUP BY TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd')
ORDER BY TIME

  

  第三步:按日期进行分组求和

SELECT TIME, --时间
SUM(STATIC_CODE) STATIC_CODE, --静态二维码
SUM(DYNAMIC_CODE) DYNAMIC_CODE, --动态二维码
SUM(STATIC_CODE) + SUM(DYNAMIC_CODE) SCAN_CODE --扫码
FROM (
--按日期统计动态二维码
SELECT TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd') TIME,
0 STATIC_CODE,
COUNT(1) DYNAMIC_CODE
FROM VIRTUAL_QRCODELOG
WHERE QR_CODE_TYPE = 0
GROUP BY TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd')
UNION ALL
--按日期统计静态二维码
SELECT TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd') TIME,
COUNT(1) STATIC_CODE,
0 DYNAMIC_CODE
FROM VIRTUAL_QRCODELOG
WHERE QR_CODE_TYPE = 1
GROUP BY TO_CHAR(QR_CREATETIME, 'yyyy-MM-dd'))
GROUP BY TIME
ORDER BY TIME;

3.存储过程展示

CREATE OR REPLACE PROCEDURE CARD_COUNT_QRCODE(V_START    IN VARCHAR2, --开始时间
V_END IN VARCHAR2, --结束时间
OUT_CURSOR OUT SYS_REFCURSOR) IS --系统游标
/**
* 内容:电子卡二维码应用情况统计
* 日期:2018/08/20
* 作者:MARYDON
* 版本:1.0
*/
V_START_DATE VARCHAR2(19);
V_END_DATE VARCHAR2(19);
V_DATEFORMAT VARCHAR2(10);--按日期进行分组格式
--开始时间、结束时间拼接
BEGIN
IF (LENGTH(V_START) = 4) THEN
--yyyy
V_START_DATE := V_START || '-01-01 00:00:00';
V_END_DATE := V_END || '-12-31 00:00:00';
V_DATEFORMAT := 'YYYY';
ELSIF (LENGTH(V_START) = 7) THEN
--yyyy-mm
V_START_DATE := V_START || '-01 00:00:00';
SELECT TO_CHAR(LAST_DAY(TO_DATE(V_END, 'YYYY-MM')), 'YYYY-MM-DD') ||
' 00:00:00'
INTO V_END_DATE
FROM DUAL;
V_DATEFORMAT := 'YYYY-MM';
ELSE
--yyyy-mm-dd
V_START_DATE := V_START || ' 00:00:00';
V_END_DATE := V_END || ' 00:00:00';
V_DATEFORMAT := 'YYYY-MM-DD';
END IF; --业务执行
OPEN OUT_CURSOR FOR
SELECT TIME,--时间
SUM(STATIC_CODE) STATIC_CODE, --静态二维码
SUM(DYNAMIC_CODE) DYNAMIC_CODE, --动态二维码
SUM(STATIC_CODE) + SUM(DYNAMIC_CODE) SCAN_CODE --扫码
FROM (
--按日期统计动态二维码
SELECT TO_CHAR(QR_CREATETIME, V_DATEFORMAT) TIME, 0 STATIC_CODE, COUNT(1) DYNAMIC_CODE
FROM VIRTUAL_QRCODELOG
WHERE QR_CODE_TYPE = 0
AND QR_CREATETIME >=
TO_DATE(V_START_DATE, 'YYYY-MM-DD HH24:MI:SS')
AND QR_CREATETIME <
(TO_DATE(V_END_DATE, 'YYYY-MM-DD HH24:MI:SS') + 1)
GROUP BY TO_CHAR(QR_CREATETIME, V_DATEFORMAT)
UNION ALL
--按日期统计静态二维码
SELECT TO_CHAR(QR_CREATETIME, V_DATEFORMAT) TIME, COUNT(1) STATIC_CODE, 0 DYNAMIC_CODE
FROM VIRTUAL_QRCODELOG
WHERE QR_CODE_TYPE = 1
AND QR_CREATETIME >=
TO_DATE(V_START_DATE, 'YYYY-MM-DD HH24:MI:SS')
AND QR_CREATETIME <
(TO_DATE(V_END_DATE, 'YYYY-MM-DD HH24:MI:SS') + 1)
GROUP BY TO_CHAR(QR_CREATETIME, V_DATEFORMAT)
)
GROUP BY TIME
ORDER BY TIME;
END CARD_COUNT_QRCODE; 
 

oracle 存储过程 示例的更多相关文章

  1. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  2. [转]使用ADO.NET访问Oracle存储过程

    本文转自:http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程( ...

  3. oracle存储过程 --1

    一,oracle存储过程语法   1.oracle存储过程结构  CREATE OR REPLACE PROCEDURE oracle存储过程名字 (     参数1 IN NUMBER,     参 ...

  4. [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数

    作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...

  5. C#调用Oracle存储过程

    C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...

  6. C#调用 oracle存储过程

    C#调用oracle 存储过程与调用Sql server存储过程类似,比较简单:直接给出示例: /// <summary> /// 判断物料类型是不是总部管控 /// </summa ...

  7. 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  8. Oracle 存储过程—为数传递变量

    oracle 存储过程的基本语法create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 i ...

  9. JDBC调用oracle 存储过程

    1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中. --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用 ...

随机推荐

  1. bzoj 2733 Splay 启发式合并,名次树

    题意:给定一个带点权的无向图,有两种操作: 1.将两个连通分量合并. 2.查询某个连通分量里的第K大点. 题解: 用并查集维护连通关系,一开始建立n棵splay树,然后不断合并,查询. 处理技巧: 1 ...

  2. python开发_linecache

    #从linecache的名称,我们可以知道该模块和cache(缓存)有关 #linecache现把文件读入到缓存中,在以后访问文件的时候,就不必要再从硬盘读取 #所以经常用于那些读取频率很高的文件还可 ...

  3. hihocoder 1522 : F1 Score

    题目链接   时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和他的小伙伴们一起写了很多代码.时间一久有些代码究竟是不是自己写的,小Hi也分辨不出来了. 于是他实现 ...

  4. JQ 数组动态添值,对象动态添值,判断数组/对象是否为空

    1.数组动态添值 首先声明一个空数组:var data = new Array(); 向数组中添值 :data.push('添加的值'); 示例:

  5. 按字母顺序排列的IDC函数列表

    http://www.2cto.com/shouce/ida/162.htm 按字母顺序排列的IDC函数列表 下面是函数描述信息中的约定: 'ea' 线性地址 'success' 0表示函数失败:反之 ...

  6. LINQ中的动态排序

    使用Linq动态属性排序 使用反射: public static Func<T,Tkey> DynamicLambda<T, Tkey>(string propertyName ...

  7. Mac OS上的远程桌面

    最近在做Mac上面的开发,经常在win7和Mac两台电脑上操作,两个键盘,两个鼠标,搞得头都大了,所以干脆把Mac机器远程到win7上面,统一来做,方便些..哈哈!说实话,Mac键盘那些按键真还有点特 ...

  8. 记一次压力测试和对nginx/tomcat配置的调整

    原文地址:还没找到 是一个web系统,前端使用nginx做为反向代理,处理https,并将请求转发给后端的tomcat服务. 压力测试工具选择了jmeter. 首先简单介绍一下jmeter. 它是ap ...

  9. .NET:CLR via C# The CLR’s Execution Model

    The CLR’s Execution Model The core features of the CLR memory management. assembly loading. security ...

  10. WPF性能调试系列 – 应用程序时间线

    WPF性能调试系列文章: WPF页面渲染优化:Application Timeline WPF页面业务加载优化:Ants Performance Profiler WPF内存优化:Ants Memor ...