oracle 存储过程 示例
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 存储过程 示例的更多相关文章
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- [转]使用ADO.NET访问Oracle存储过程
本文转自:http://www.cnblogs.com/datasky/archive/2007/11/07/952141.html 本文讨论了如何使用 ADO.NET 访问 Oracle 存储过程( ...
- oracle存储过程 --1
一,oracle存储过程语法 1.oracle存储过程结构 CREATE OR REPLACE PROCEDURE oracle存储过程名字 ( 参数1 IN NUMBER, 参 ...
- [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...
- C#调用Oracle存储过程
C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...
- C#调用 oracle存储过程
C#调用oracle 存储过程与调用Sql server存储过程类似,比较简单:直接给出示例: /// <summary> /// 判断物料类型是不是总部管控 /// </summa ...
- 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
- Oracle 存储过程—为数传递变量
oracle 存储过程的基本语法create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 i ...
- JDBC调用oracle 存储过程
1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中. --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用 ...
随机推荐
- [HEOI2013]SAO
题目大意: 一个有向无环图上有n个结点, 现在告诉你n-1个条件(x,y),表示x和y的先后关系. 问原图共有几种可能的拓扑序? 思路: 树形DP. f[i][j]表示对于第i个结点,有j个点在它前面 ...
- 内功心法 -- java.util.LinkedList<E> (3)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- VK Cup 2016 - Qualification Round 1 (Russian-Speaking Only, for VK Cup teams) B. Chat Order 水题
B. Chat Order 题目连接: http://www.codeforces.com/contest/637/problem/B Description Polycarp is a big lo ...
- MYSQL学习笔记 (一)
每次面试后,都决定一改前非.事实上依然和那些发誓再吃最后一份美食的胖子一样.不管这次是不是三分钟热度但是至少我开始. MYSQL引擎 说到MYSQL引擎我又想起研二时候去面试的第一家公司 ...
- Use a TL431 shunt regulator to limit high ac input voltage
Most isolated, offline SMPSs (switched-mode power supplies), including flyback, forward, and resonan ...
- 离线下载安装flash player
针对IE: 一般flash player的安装方法都是在线安装的方式.由于网络的问题经常容易失败,可以通过离线方法进行下载: 访问 http://helpx.adobe.com/flash-playe ...
- Cohen-SutherLand算法(编码算法)
转自:http://my.oschina.net/liqiong/blog/4921 Cohen-SutherLand算法(编码算法) 基本思想:对于每条线段P1P2,分为三种情况处理: (1)若 ...
- ubuntu 安装 consul
$ wget https://releases.hashicorp.com/consul/1.1.0/consul_1.1.0_linux_amd64.zip $ sudo apt-get insta ...
- 单击行,自己主动选中当前行中的单选框button
需求:单击行,自己主动选中当前行中的单选框button. aspx页面: <asp:Repeater ID="rptRecordList" runat="serve ...
- Linux进程间通信—信号
三.信号(Signal) 信号是Unix系统中使用的最古老的进程间通信的方法之一.操作系统通过信号来通知某一进程发生了某一种预定好的事件:接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认 ...