Oracle存储过程 一个具体实例
表结构信息,并不是用oracle描述的,但是后面的存储过程是针对oracle的 ----------------个人交易流水表----------------------------------- create table epc_flog ( mainid int primary key,自增 senddt smalldatetime null , --交易时间 brchno varchar(20) null , --机构号 custid varchar(20) null , --客户号 trancd varchar(20) null , --交易码 (其实是一种类型,,暂时用1表示行内,2表示跨行) tranam decimal(15,2) null , --交易金额 tranfe decimal(15,2) null, --交易手续费 ) -----------------个人网银交易统计-------------------------------- create table dbo.emp_trpt ( mainid int primary key,自增 rprtdt smalldatetime null , intrnm int NULL , --新增行内转账笔数 intram decimal(15,2) null, --新增行内转账金额 ontrnm int NULL , --新增跨行转账笔数 ontram decimal(15,2) null, --新增跨行转账金额 rptpfg char(1) null , -- 0:日报表 1:月报表 2:季报表 3:年报表 )
--功能: --1、可按日、月维度统计转账交易的统计 --2、eb_rp_pertrancereportday查询epc_flog表,统计出当天的交易量,并写入到emp_trpt表 --3、eb_rp_pertrancereportmonth从emp_trpt表查询该月每天的交易量并进行统计,统计结果也写入到emp_trpt表
---创建存储过程.(日统计)
create or replace procedure p_pertrancereportday(pdate in date)
as
--定义游标,其实就是一个结果集
Cursor my_cursor
is
select TRANCD ,count(1) pcount,sum(TRANAM) pamount
from EPC_FLOG
where SENDDT between (pdate-interval '24' hour) and pdate
group by TRANCD ;
--定义游标变量
c_row my_cursor%rowtype ;
begin
--使用for in loop迭代游标
for c_row in my_cursor loop
if c_row.TRANCD='1' then
insert into EMP_TRPT(RPRTDT,INTRNM,INTRAM,ONTRNM,ONTRAM,RPTPFG)
values(pdate,c_row.pcount,c_row.pamount,0,0.00,'0'); --行内数据
else
insert into EMP_TRPT(RPRTDT,INTRNM,INTRAM,ONTRNM,ONTRAM,RPTPFG)
values(pdate,0,0.00,c_row.pcount,c_row.pamount,'0'); --跨行数据
end if;
end loop;
end;
----存储过程的调用
declare
pdate date:= to_date('2013-07-08 17:00:00','yyyy-MM-dd hh24:mi:ss') ;
begin
p_pertrancereportday(pdate);
end;
/
----创建存储过程(月统计,可用) --本来不想用游标,因为只有一条数据,但是聚合函数在这里用了多个,普通的查询sum(INTRNM) into pintrnm,sum(INTRAM) into pintram等 不行 create or replace procedure p_pertrancereportmonth(pdate in date) as Cursor my_cursor is select sum(INTRNM) pintrnm, sum(INTRAM) pintram, sum(ONTRNM) pontrnm, sum(ONTRAM) pontram from EMP_TRPT where RPTPFG='0' and RPRTDT between trunc(pdate,'MON') and pdate ; --用到了oracle的时间函数 c_row my_cursor%rowtype ; begin for c_row in my_cursor loop insert into EMP_TRPT(RPRTDT,INTRNM,INTRAM,ONTRNM,ONTRAM,RPTPFG) values(pdate,c_row.pintrnm,c_row.pintram,c_row.pontrnm,c_row.pontram,'1'); end loop; end;
Oracle表主键自动生成,需要使用序列和触发器来完成
--创建序列
drop sequence emp_trpt_tb_seq;
create sequence emp_trpt_tb_seq
increment
start ;
--创建序列
create or replace trigger emp_trpt_tb_tri
before insert on emp_trpt
for each row
begin
select emp_trpt_tb_seq.nextval into :new.MAINID from dual;
end;
Oracle存储过程 一个具体实例的更多相关文章
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- Oracle——存储过程简单入门实例
1.连接plsql developer,打开一个SQL Window 2.SQL Window中创建表user_info -- Create table create table USER_INFO ...
- Oracle存储过程返回游标实例详解
复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR ...
- Oracle 查看一个数据库实例下面所有的表大小
1. 因为 oracle有一些 lob字段 在user_extents 里面取出来的结果不是表名, 所以需要与user_lobs 表做关联查询才可以 本来想通过 关联查询来实现, 发现字表查询更简单 ...
- oracle存储过程实例
oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的P ...
- 将oracle冷备份恢复到另外一个数据库实例中
因更换服务器需要将Oracle数据库转移到另外台Oracle中.说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不一 ...
- ORACLE 从一个实例迁移到另外一个实例实战记录
.schema1到schema2的迁移 Oracle 从一个用户expdp导出再impdp导入到还有一个用户,能够使用REMAP_SCHEMA=user1:user2来实现: 假设想导入的用户已经存在 ...
- oracle 存储过程
来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...
- Oracle存储过程语法
原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 ...
随机推荐
- (转)CentOS无损调整磁盘分区大小的实现方法
前几天在QQ群里,有一个朋友问到关于Linux中如何无损调整磁盘分区大小的问题,针对这个问题我在实际使用的过程中也曾探索过,所以比较关注如何无损的调整磁盘分区大小,而不丢失数据!在Windows中,我 ...
- 80C51学习 闪烁灯
//引入头文件 #include <reg52.h> typedef unsigned char u8; typedef unsigned int u16; //位定义 sbit LED= ...
- 聊聊GIS中那些坐标系
从第一次上地图学的课开始,对GIS最基本的地图坐标系统就很迷.也难怪,我那时候并不是GIS专业的学生,仅仅是一门开卷考试的专业选修课,就没怎么在意. 等我真正接触到了各种空间数据产品,我才知道万里长征 ...
- poj 1182 食物链 带权并查集
食物链是并查集的进阶运用的一道非常经典的题目. 题目如下: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A, ...
- iOS开发笔记17:自定义相机拍照
之前用AVFoundation自定义相机做了拍照与视频相关的东西,为什么要自定义呢?主要是提供更个性化的交互设计,符合app主题,对于视频来说,也便于提供更多丰富有趣的功能.前段时间整理了下拍照部分的 ...
- Catalan数——卡特兰数
一.Catalan数的定义 令h(0)=1,h(1)=1,Catalan数满足递归式:h(n) = h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)*h(0) (n& ...
- MySQL之数据的备份与还原
备份db_book:这里用到了cmd,以管理员方式运行,不然后面使用mysqldump会被拒绝访问!!! 1.启动cmd,输入命令,切换到MySQL的bin文件: 2.然后输入备份命令: 备份好的sq ...
- [2016-09-23]远程安装、更新windows服务bat脚本分享
话不多说,有兴趣的自己可以仔细研究下涉及的命令:net use.sc.robocopy 脚本 set BuildConfig=[ENV] set BuildExeName=[your_exe_name ...
- TTL转MIPI DSI芯片方案TC358778XBG
型号:TC358778XBG功能:TTL转MIPI DSI通信方式:IIC分辨率:1920*1080电源:3.3/1.8/1.2封装形式:BGA80深圳长期现货 ,提供技术支持,样品申请及规格书请联系 ...
- 安装lvs过程
linux我是最小化安装的mini,安装完成后搭建本地yum,首先安装Development Tools开发工具组 1)在各服务器上修改主机名: [root@LVS1 ~]# hostname LVS ...