存储过程第一步

存储过程第一步

特色:
1.存储过程传入list参数( arrayStr 和 qtyNum 都是)
2.递归查询插入临时表

CREATE DEFINER=`root`@`%` PROCEDURE `sp_sdm_bom_many_select`(in arrayStr MEDIUMTEXT,IN qtyNum MEDIUMTEXT,IN tenantCodeValue VARCHAR(100))
BEGIN
	declare i int default 0;
	
	set @arrayLength = 1 + (length(arrayStr) - length(REPLACE(arrayStr,',','')));
	
		DROP TEMPORARY TABLE IF EXISTS many_bom_result;
    -- 创建临时表
    CREATE TEMPORARY TABLE IF NOT EXISTS many_bom_result(
				rootcode varchar(100),-- 根物料
				matcode varchar(100),-- 物料号
				matcode_parent varchar(100),-- 上级物料号
				qty decimal(18,2),-- 数量
				unit varchar(255),-- 单位
				class_code varchar(255)-- 停用时间
		);
    -- 清空临时表数据
    DELETE FROM many_bom_result;
    -- 发起调用
	while i < @arrayLength
 
	DO
 
	set i = i+1;
	
	set @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(arrayStr,',',i)),',',1));
 
-- 	添加语句
-- 	位置截取: SUBSTRING_INDEX(@result,',',1)  SUBSTRING_INDEX(@qtyNum,',',1) 
				insert into many_bom_result(rootcode,matcode,matcode_parent,qty,unit,class_code) 
				SELECT SUBSTRING_INDEX(@result,',',1),bom_list_res.* FROM ( WITH RECURSIVE cte_sdm_bom_relation AS(
				SELECT * FROM sdm_bom_relation WHERE matcode_parent = SUBSTRING_INDEX(@result,',',1) AND   tenant_code = tenantCodeValue
				UNION ALL			SELECT u.* FROM sdm_bom_relation u, cte_sdm_bom_relation t WHERE u.matcode_parent = t.matcode)
				SELECT matcode,matcode_parent ,qty*SUBSTRING_INDEX(@qtyNum,',',1) as qty,unit,
				(SELECT classification_code FROM sbm_materiel m WHERE cte_sdm_bom_relation.matcode = m.matcode) as class_code 
				FROM cte_sdm_bom_relation ) as  bom_list_res;
				
  end while;
	SELECT rootcode,matcode,matcode_parent AS 'matcodeparent',qty,unit,class_code AS 'classCode' FROM many_bom_result;
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值