SQL存储过程展易飞BOM
2016-03-23 14:49
761 查看
create TABLE ZBOMCB1
(
--BOM展开表算表
CB001 CHAR(20) NOT NULL,
CB005 CHAR(20) NOT NULL,
CB008 numeric(16) NOT NULL
)
CREATE PROCEDURE ZGetBOM3Level
as
--使用游标展算BOM插ZBOMCB1
delete from ZBOMCB1
declare @cb001 char(60),@cb002 char(60)--,@MQ003 CHAR(23),@LA011 int--,@cb001_P char (60);
--INSERT INTO ZBOMCB1 SELECT CB001,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001='211-001-3003-03-02' AND MB025='P' AND CB022='Y'
begin
declare my CURSOR --定义游标
--获取游标集合
--for (select a.MQ003, a.LA001,a.LA011 from zfunTable('20150301','20160229') a left join INVMB b on a.LA001=b.MB001 where MB109='Y'AND MB025 !='P')
--for(SELECT CB001,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001='211-001-3003-03-02' AND MB025='M' AND CB022='Y' AND MB109='Y' )
for(SELECT MB001 FROM INVMB WHERE MB025='M' AND MB109='Y' )
open my--打开游标
fetch next from my into @cb002--读取第一行数据 赋值给变量
while @@FETCH_STATUS=0
begin
--插入BOM一阶
INSERT INTO ZBOMCB1 SELECT @cb002,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb002 AND MB025='P'
begin --开始BOM二阶
if(exists(SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb002 AND MB025='M'))
declare @cb001_1 char(60)
declare my1 CURSOR
FOR( SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb002 AND MB025='M')
open my1
fetch next from my1 into @cb001_1
while @@FETCH_STATUS=0
begin
--插入BOM二阶
INSERT INTO ZBOMCB1 SELECT @cb002,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_1 AND MB025='P'
begin --开始循环三阶
if(exists(SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_1 AND MB025='M'))
declare @cb001_2 char(60)
declare my2 CURSOR
FOR( SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_1 AND MB025='M')
open my2
fetch next from my2 into @cb001_2
while @@FETCH_STATUS=0
begin
--开始插入三阶
INSERT INTO ZBOMCB1 SELECT @cb002,CB005,CB008 FR
af44
OM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_2 AND MB025='P'
fetch next from my2 into @cb001_2
end
close my2
deallocate my2
end
fetch next from my1 into @cb001_1
end
close my1
deallocate my1
end
fetch next from my into @cb002
end
close my --关闭游标
deallocate my --释放游标
end
go
(
--BOM展开表算表
CB001 CHAR(20) NOT NULL,
CB005 CHAR(20) NOT NULL,
CB008 numeric(16) NOT NULL
)
CREATE PROCEDURE ZGetBOM3Level
as
--使用游标展算BOM插ZBOMCB1
delete from ZBOMCB1
declare @cb001 char(60),@cb002 char(60)--,@MQ003 CHAR(23),@LA011 int--,@cb001_P char (60);
--INSERT INTO ZBOMCB1 SELECT CB001,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001='211-001-3003-03-02' AND MB025='P' AND CB022='Y'
begin
declare my CURSOR --定义游标
--获取游标集合
--for (select a.MQ003, a.LA001,a.LA011 from zfunTable('20150301','20160229') a left join INVMB b on a.LA001=b.MB001 where MB109='Y'AND MB025 !='P')
--for(SELECT CB001,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001='211-001-3003-03-02' AND MB025='M' AND CB022='Y' AND MB109='Y' )
for(SELECT MB001 FROM INVMB WHERE MB025='M' AND MB109='Y' )
open my--打开游标
fetch next from my into @cb002--读取第一行数据 赋值给变量
while @@FETCH_STATUS=0
begin
--插入BOM一阶
INSERT INTO ZBOMCB1 SELECT @cb002,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb002 AND MB025='P'
begin --开始BOM二阶
if(exists(SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb002 AND MB025='M'))
declare @cb001_1 char(60)
declare my1 CURSOR
FOR( SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb002 AND MB025='M')
open my1
fetch next from my1 into @cb001_1
while @@FETCH_STATUS=0
begin
--插入BOM二阶
INSERT INTO ZBOMCB1 SELECT @cb002,CB005,CB008 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_1 AND MB025='P'
begin --开始循环三阶
if(exists(SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_1 AND MB025='M'))
declare @cb001_2 char(60)
declare my2 CURSOR
FOR( SELECT CB005 FROM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_1 AND MB025='M')
open my2
fetch next from my2 into @cb001_2
while @@FETCH_STATUS=0
begin
--开始插入三阶
INSERT INTO ZBOMCB1 SELECT @cb002,CB005,CB008 FR
af44
OM BOMCB LEFT JOIN INVMB ON MB001=CB005 WHERE CB001=@cb001_2 AND MB025='P'
fetch next from my2 into @cb001_2
end
close my2
deallocate my2
end
fetch next from my1 into @cb001_1
end
close my1
deallocate my1
end
fetch next from my into @cb002
end
close my --关闭游标
deallocate my --释放游标
end
go
相关文章推荐
- mysql 时间戳转换为日期
- MySQL主从复制的安装配置
- MySQL多表查询核心优化
- mysql 统计连续登录天数
- MySQL使用游标批量处理进行表操作
- mysql死锁
- java调用oracle存储过程返回多条结果集
- oracle光标
- mysql 按照姓氏排序
- DB2数据库创建非实例用户连接使用数据库
- DB2在操作系统用户下创建数据库schema
- MySQL数据库的备份与还原
- DB2修改(mv)数据库文件名称后的现象
- (整理)FORM:Oracle EBS客制化Form的菜单栏用法说明
- mysql集群
- 浅谈MySQL数据库查询优化
- mysql修改max_allowed_packet
- ubuntu的mysql卸载与安装
- mysql求某个列的前10条记录的总和
- Redis集群客户端及高可用解决方案