DECLARE @t INT
SET @t=1
-->创建临时表#t_BOM存储第一阶的子项物料代码
CREATE TABLE #t_BOM(BMB03 varchar(400),层 INT)
INSERT INTO #t_BOM
SELECT aa.BMB03,@t
FROM bmb_file aa
WHERE aa.BMB01='14N1003'
ORDER BY aa.BMB03-->创建临时表#t_BOMChild存储“其下阶有BOM”的子项物料代码
CREATE TABLE #t_BOMChild(BMB03 varchar(400),层 INT)
INSERT INTO #t_BOMChild
SELECT aa.BMB03,aa.层
FROM #t_BOM aa
WHERE EXISTS (SELECT bb.BMB01 FROM bmb_file bb WHERE aa.BMB03=bb.BMB01)-->循环向临时表#t_BOM和#t_BOMChild插入数据
WHILE @@ROWCOUNT>0
BEGIN
SET @t=@t+1
INSERT INTO #t_BOM
SELECT bb.BMB03,@t
FROM #t_BOMChild aa
INNER JOIN bmb_file bb ON aa.BMB03=bb.BMB01
WHERE aa.层=@t-1 INSERT INTO #t_BOMChild
SELECT aa.BMB03,aa.层
FROM #t_BOM aa
WHERE aa.层=@t AND EXISTS (SELECT bb.BMB01 FROM bmb_file bb WHERE aa.BMB03=bb.BMB01)
END-->若要去掉下阶有物料的子物料代码则需要下面Delete语句
DELETE FROM #t_BOM
WHERE EXISTS(SELECT * FROM #t_BOMChild bb WHERE #t_BOM.BMB03=bb.BMB03)SELECT *
FROM #t_BOM aa
解决方案 »
- ORACLE 如何并發執行過程
- plsql执行EXECUTE IMMEDIATE STR 时权限不足
- 您好,请问从哪入手学习ORACLE
- SQL求助
- sql高手进来看看如何用sql实现舍位平衡?(带测试数据)
- 我在oracle中要用sql语句建一个表,但是有的列的数据要用前面的列数据运算获得,这个表怎么建?
- Oracle中的触发器与存储过程在每次服务器重启后都变动红色无效状态,必须在触发器与存储过程上进行编译才能变成正常有效状态。请问各位如
- 在ORACLE中的日期比较(在线等待)
- 修改字符集后数据库无法登陆,请赐教!!!
- 创建存储过程,大侠助我!(在线等待)
- 菜鸟跪求帮助!!
- SQL语言的一个简单问题
t:=1;
-->创建临时表t_BOM存储第一阶的子项物料代码
CREATE GLOBAL TEMPORARY TABLE t_BOM(BMB03 varchar(400),层 INT)
INSERT INTO t_BOM
SELECT aa.BMB03,t
FROM bmb_file aa
WHERE aa.BMB01='14N1003'
ORDER BY aa.BMB03;-->创建临时表t_BOMChild存储“其下阶有BOM”的子项物料代码
CREATE GLOBAL TEMPORARY TABLE t_BOMChild(BMB03 varchar(400),层 INT)
INSERT INTO t_BOMChild
SELECT aa.BMB03,aa.层
FROM t_BOM aa
WHERE EXISTS (SELECT bb.BMB01 FROM bmb_file bb WHERE aa.BMB03=bb.BMB01);-->循环向临时表t_BOM和t_BOMChild插入数据
WHILE SQL%ROWCOUNT>0 loop
t:=t+1
INSERT INTO t_BOM
SELECT bb.BMB03,@t
FROM t_BOMChild aa
INNER JOIN bmb_file bb ON aa.BMB03=bb.BMB01
WHERE aa.层=t-1; INSERT INTO t_BOMChild
SELECT aa.BMB03,aa.层
FROM t_BOM aa
WHERE aa.层=t AND EXISTS (SELECT bb.BMB01 FROM bmb_file bb WHERE aa.BMB03=bb.BMB01);end loop;
-->若要去掉下阶有物料的子物料代码则需要下面Delete语句
DELETE FROM t_BOM
WHERE EXISTS(SELECT * FROM t_BOMChild bb WHERE t_BOM.BMB03=bb.BMB03);SELECT *
FROM t_BOM aa;