`

oracle游标

阅读更多

create table tb_lzw_zj201103160003_ser
(
seq_code number(5) ,
servnumber varchar2(20) ,
pd_type varchar2(64) ,
card_type varchar2(64)
)
;

/*
select count(servnumber) , count(distinct servnumber) from tb_lzw_zj201103160003_ser ;
6236362362


select servnumber
from tb_lzw_zj201103160003_ser
group by servnumber
having count(servnumber) >= 2
;

13590099966

select * from tb_lzw_zj201103160003_ser where servnumber = '13590099966';
;

5969613590099966普通老客户银卡
6231413590099966特殊评定银卡


----需求人确定保留"特殊评定"的记录

delete from tb_lzw_zj201103160003_ser
where seq_code = 59696 ;
commit ;


select
a.pd_type , count(a.servnumber)
from tb_lzw_zj201103160003_ser a
group by a.pd_type
order by a.pd_type
;

积分评定6965
积分评定(优质客户)4107
老客户升级878
老客户升级(优质客户)444
内部测试客户24
普通老客户48751
套餐评定29
特殊评定1118
特殊评定(优质客户)46


select card_type , count(servnumber) cnt
from tb_lzw_zj201103160003_ser
group by card_type
order by card_type
;

金卡3135
银卡59040
钻石卡187
*/

/*

卡号码组成为:19 YY PP F X1 X2 X3 X4 X5 X6 X7 X8 X9 共计16位
 
号码的格式定义如下: 
19广东省代码
YY编制为VIP卡生产年号(今年11)
PPVIP卡生产批次标志(按照厂家接到生产数据的月份定,统一填写为01)
F1代表钻卡,2代表金卡,3代表银卡
X1 X2各市区域代码
X3为客户类型代码,1为积分客户,2为重要客户,3为集团客户,4为内部测试客户,5、优质客户 6为套餐办理客户,7尊享老客户(即十年老客户升级VIP资格的),9其他。
X4 X5 X6 X7 X8 X9客户编号:6位号码按顺序产生


191101F12XYYYYYY


为客户类型代码,
1为积分客户,2为重要客户,3为集团客户,4为内部测试客户,5、优质客户
6为套餐办理客户,7尊享老客户(即十年老客户升级VIP资格的),9其他。

1积分评定6965
5积分评定(优质客户)4107
7老客户升级878
5老客户升级(优质客户)444
4内部测试客户24
7普通老客户48751
6套餐评定29
2特殊评定1118
5特殊评定(优质客户)46
*/


create table tb_lzw_zj201103160003_ser2 nologging as
select a.seq_code , --序号
a.servnumber , --号码
a.pd_type , --评定类型(ITC)
a.card_type , --2011卡类
a.style||a.style2 code , --卡号前10位
row_number () over (partition by a.style||a.style2 order by a.servnumber) code1 --序列号
from (select
x.seq_code ,
x.servnumber ,
x.pd_type ,
x.card_type ,
case when x.card_type = '钻石卡' then 191101112
when x.card_type = '金卡' then 191101212
when x.card_type = '银卡' then 191101312 end style ,
case when x.pd_type = '积分评定' then 1
when x.pd_type = '特殊评定' then 2
when x.pd_type = '内部测试客户' then 4
when x.pd_type like '%(优质客户)' then 5
when x.pd_type = '套餐评定' then 6
when x.pd_type = '普通老客户' then 7
when x.pd_type = '老客户升级' then 7 end style2
from tb_lzw_zj201103160003_ser x
) a
;


----中间汇总数据
create table tb_lzw_zj201103160003_ser3
(
seq_code number(5) , --序号
servnumber varchar2(20) , --号码
pd_type varchar2(64) , --评定类型(ITC)
card_type varchar2(64) , --2011卡类
code number(10) , --卡号前10位
code2 number(5) --客户编号序列号
)
;


----银卡号码处理(2、银卡的X9(最后一位)避免用4、7)

declare

v_seq_code number(5) ;
v_servnumber varchar2(20) ;
v_pd_type varchar2(64) ;
v_card_type varchar2(64) ;
v_code varchar2(20) ;
v_code1 number(5) ;
v_code2 number(5):=0 ;

cursor v_cursor is
select a.seq_code ,
a.servnumber ,
a.pd_type ,
a.card_type ,
a.code ,
a.code1
from tb_lzw_zj201103160003_ser2 a
where a.card_type = '银卡'
;

begin
open v_cursor;
loop
fetch v_cursor into v_seq_code,v_servnumber,v_pd_type,v_card_type,v_code,v_code1;
exit when v_cursor%notfound;

v_code2:=v_code2+1;

if v_code1=1 then
v_code2:=1;
elsif mod(v_code2,10)=4 or mod(v_code2,10)=7 then
v_code2:=v_code2+1;
end if;
insert into tb_lzw_zj201103160003_ser3 values
(v_seq_code,v_servnumber,v_pd_type,v_card_type,v_code,v_code2);
commit ;

end loop ;
end
;

----钻石卡、金卡号码处理(1、全球通钻石卡、金卡的X9(最后一位) 要求为8)

insert into tb_lzw_zj201103160003_ser3 nologging
select
s.seq_code ,
s.servnumber ,
s.pd_type ,
s.card_type ,
s.code ,
(s.code1-1)*10+8
from tb_lzw_zj201103160003_ser2 s
where s.card_type in ('钻石卡','金卡')
;
commit ;


/*
select distinct
card_type ,
mod(code2,10)
from tb_lzw_zj201103160003_ser3
order by card_type , mod(code2,10)
;

金卡8
银卡0
银卡1
银卡2
银卡3
银卡5
银卡6
银卡8
银卡9
钻石卡8

select
count(code||code2) ,
count(distinct code||code2)
from tb_lzw_zj201103160003_ser3
;

6236262362
*/

----导出数据

select
a.seq_code ,
a.servnumber ,
a.pd_type ,
a.card_type ,
case when length(a.code2) = 1 then a.code||'00000'||a.code2
when length(a.code2) = 2 then a.code||'0000'||a.code2
when length(a.code2) = 3 then a.code||'000'||a.code2
when length(a.code2) = 4 then a.code||'00'||a.code2
when length(a.code2) = 5 then a.code||'0'||a.code2
when length(a.code2) = 6 then a.code||a.code2 end
from tb_lzw_zj201103160003_ser3 a
order by a.seq_code
;


drop table tb_lzw_zj201103160003_ser purge ;
drop table tb_lzw_zj201103160003_ser2 purge ;
drop table tb_lzw_zj201103160003_ser3 purge ;

分享到:
评论

相关推荐

    ORACLE 游标使用示例

    下面,我们将深入探讨Oracle游标的使用示例及其相关的知识点。 首先,游标的基本概念是它提供了一种方式来跟踪并控制SQL查询的结果集。在Oracle中,游标有四种状态:未打开、已打开、正在提取和已关闭。以下是一个...

    Oracle游标使用大全

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集。它允许用户通过PL/SQL编程语言逐行访问和处理查询返回的数据记录。游标可以是显式定义的(即在...

    oracle游标使用大全

    总之,Oracle游标提供了处理查询结果的强大工具,使开发者能够灵活地在PL/SQL中操作数据。无论是隐式还是显式游标,都极大地增强了对数据库的交互能力,使得程序能根据查询结果进行适当的操作。理解并熟练运用游标是...

    Oracle游标使用案例大全

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...

    Oracle游标使用方法及语法大全

    Oracle 游标使用方法及语法大全 Oracle 游标是 PL/SQL 程序中的一种重要组件,用于处理查询结果集。游标可以分为隐式游标和显式游标两种,隐式游标由 PL/SQL 管理,隐式游标打开时查询开始,查询结束时隐式游标自动...

    oracle游标使用及实例

    ### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...

    oracle 游标FOR循环.doc

    Oracle 游标 FOR 循环 Oracle 游标 FOR 循环是 Oracle 数据库中的一种编程技术,用于实现游标的循环操作。游标 FOR 循环可以代替传统的游标循环,具有简洁易用的优点。 游标 FOR 循环的优点 游标 FOR 循环的优点...

    Oracle游标使用方法及语法大全.doc

    ### Oracle游标使用详解 #### 一、游标概述 游标是Oracle数据库中用于处理查询结果集的强大工具,尤其适用于需要逐行处理查询结果的情况。在Oracle中,游标可以分为两类:**显式游标**和**隐式游标**。 1. **隐式...

    oracle游标学习资料

    Oracle游标是数据库编程中非常重要的一个概念,它允许开发者逐行处理查询结果集,而不仅仅是一次性处理所有数据。在Oracle中,游标分为隐式游标和显式游标。 **一、游标简介** 游标的核心功能是提供一种方式来遍历...

    Oracle游标使用详解

    根据提供的标题、描述以及部分代码内容,我们可以详细探讨Oracle游标的使用方法,特别是明确游标(Explicit Cursor)和隐式游标(Implicit Cursor)的区别及其具体应用方式。 ### Oracle游标简介 在Oracle数据库中...

    Oracle 游标使用大全.pdf

    通过本篇Oracle游标的使用大全,我们可以了解到Oracle数据库游标的类型、属性以及如何在PL/SQL中实现对数据集的逐行处理。这不仅有助于提升程序员的编程技能,也能使他们更深入地理解PL/SQL与Oracle数据库之间的交互...

    oracle游标使用大全1.txt

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种用于处理查询结果集的强大工具。它允许用户通过逐行访问数据来执行复杂的操作,如更新、删除或插入记录等。游标可以分为显式游标和...

    oracle 游标 深入浅出 详解 精析 示例

    Oracle游标是数据库管理系统中的一种重要机制,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。游标类似于C语言中的指针,能够灵活、高效地处理多条记录,尤其在需要循环处理或者根据当前行数据做...

    快速练习ORACLE游标习题及答案

    根据提供的文件信息,我们可以归纳出以下Oracle游标的使用方法及相关知识点: ### 一、游标的基本概念 在Oracle数据库中,游标是一种重要的机制,它允许用户从查询结果集中逐行检索数据。游标可以分为两种类型:**...

    ORACLE游标与异常处理

    首先,让我们来理解Oracle游标。游标是数据库系统提供的一种机制,允许用户在结果集上进行迭代,一次处理一行数据。在PL/SQL中,游标用于检索SQL查询返回的结果集,并按需逐行处理。以下是一个简单的游标使用示例: ...

    oracle游标优化

    ### Oracle游标优化 在Oracle数据库管理中,游标是一种重要的机制,用于处理查询结果集。游标可以被看作是存储查询结果的一种临时区域,它允许用户通过循环逐行处理这些结果。游标不仅可以提高应用程序的灵活性,还...

    oracle 游标

    Oracle 游标是一种数据库编程工具,它允许程序员逐行处理查询结果集,而不仅仅是一次性获取所有数据。在Oracle中,游标尤其适用于处理大量数据,或者需要根据当前数据行进行决策的情况。游标通常与存储过程结合使用...

Global site tag (gtag.js) - Google Analytics