通过不断修炼,终于写出了第一个递归程序(存储过程)。并成功生成了自己想要的数据(*^▽^*)
此存储过程针对鼎捷T100ERP的BOM表结构所写,有需要可借鉴
功能为:传入原料料号,函数处理找到最终阶的成品料号插入临时表中
上代码:
---临时表建立
create global temporary table temp_libinbin1
(cplh varchar(40),yllh varchar(40)
) on commit preserve rows;
---递归根据BOM原料查询BOM成品料号
create or replace PROCEDURE bom_max(l_bmba003 in varchar,g_bmba003 in varchar)
as
l_n number;
con_yl constant varchar(40):= g_bmba003;
begin
l_n := 0;
for v_emp in (select bmba001 from bmba_t where bmba003 = l_bmba003 and bmbasite = 'YTOP') loop
select COALESCE(sum(1),0) INTO l_n from bmba_t where bmba003 = v_emp.bmba001 and bmbasite = 'YTOP';
IF l_n > 0 THEN
-- INSERT INTO temp_libinbin(liaohao) values(v_emp.bmba001);
bom_max(l_bmba003 => v_emp.bmba001,g_bmba003 => con_yl);
else
INSERT INTO temp_libinbin1(cplh,yllh) values(v_emp.bmba001,con_yl);
commit;
end if;
end loop;
end;
---执行
declare
liaohao varchar(40);
begin
for v_emp in (select liaohao from temp_libinbin ) loop
liaohao := v_emp.liaohao;
--liaohao := '060-P9TB-GP245-1H'; --测试
--变量 --常量
bom_max(l_bmba003 =>liaohao,g_bmba003 => liaohao);
end loop;
end;
代码中如有可以优化或写的有问题的地方,请大神们指出,小弟听劝
执行结果:
一个原料用在144成品里!
找了几个bom验证下数据也都OK,如下图