oracle sql 将一条记录复制拆分成多条,怎样按条件执行循环

我有一张表叫DEVICES,数据如下:IDDEVICE_NMDEVICE_QTYFLAG1DEVICE_A4Y2DEVICE_B1Y3DEVICE_C3N当DEVICE_... 我有一张表叫DEVICES,数据如下:
ID DEVICE_NM DEVICE_QTY FLAG
1 DEVICE_A 4 Y
2 DEVICE_B 1 Y
3 DEVICE_C 3 N
当DEVICE_QTY>1并且FLAG='Y'的时候,执行操作,将这条信息进行拆分为DEVICE_QTY条,并将数量置为1。
如以第一条ID=1为例:因为device_qty是4大于1,flag是Y,那么执行操作:将这条信息拆分成4条相同的信息,并且数量置为1,即执行后表中就是这样了:
ID DEVICE_NM DEVICE_QTY FLAG
1 DEVICE_A 1 Y
2 DEVICE_B 1 Y
3 DEVICE_C 3 N
4 DEVICE_A 1 Y
5 DEVICE_A 1 Y
6 DEVICE_A 1 Y
设备名为DEVICE_A的就有了4条记录。
我想用循环来实现这个操作,但是不知道怎么描写条件。或者有其他的方法也可以,谢谢大家!
展开
 我来答
pieryon
推荐于2016-06-09 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166869
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
用oracle start with connect by 可以实现。

oracle start with connect by 用法oracle 提供了start with connect by 语法结构可以实现递归查询。

1. 一个简单举例:
SQL> select * from test;

BILL_MONTH DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803 1 13800
200803 3 13800
200803 2 13800
200803 2 13801
200803 4 13804
200803 5 13804
200803 7 13804
200803 8 13804
200803 6 13802
200803 6 13801
200803 7 13801
200803 8 13801
12 rows selected

SQL> select * from test
2 start with day_number=1
3 connect by prior day_number=day_number-1 and prior msisdn= msisdn
4 ;

BILL_MONTH DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803 1 13800
200803 2 13800
200803 3 13800

上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.
wackyer
2014-11-19 · TA获得超过928个赞
知道小有建树答主
回答量:605
采纳率:71%
帮助的人:386万
展开全部
declare @qty,@i;
set @i=0;
set @qty =(select qty from DEVICES where DEVICE_QTY>1 and FLAG='Y')
while @i<isnull(@qty, 0)
begin
insert
@i = @i +1
end

大概就是这个意思
更多追问追答
追问
报错了 ORA-06550: line 3, column 3: PLS-00103: Encountered the symbol "=" when expecting one of the following:
追答
这是Sql Server的写法,你自己根据实际修改成Oracle的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式