Oracle存储过程从一张表中取出动态表名,从动态表中取出数据合集

时间:2021-10-11 09:25:06
现在有一张关系表,车辆编号,有效性(从第N辆到第M辆生产批次),bom清单编号:对应相应的bom物料清单表
例如:
 车辆编号   有效性      bom清单表编号   
  BMW01     002-007     440017
  BMW01     011-066     440018
   对应相应的bom物料清单表
     bom清单表  bom_plan_440017

 pnumber Fname     counNumber   车间
A001      零件1       13         23
A002      零件10      63         22
A003      零件22      63         23
A004      零件62      73         23     
-------------------------------------
  bom清单表  bom_plan_440018
零件编号   零件名称  使用数量       生产车间       
pnumber   Fname     counNumber        chejian       
A001      零件1      13                 23          
A002      零件10     33                 23
A003      零件22      13                 35
A004      零件62      33                 45
--------------------------------------
目标结果集合为  
零件编号   零件名称  使用数量       生产车间      有效性
A001      零件1      13                 23        002-007,011-066         
A002      零件10     63                 23         002-007
A002      零件10     33                 23         011-066
A003      零件22     63                 23         002-007 
A003      零件22     13                35          011-066
A004      零件62     73                 23         002-007
A004      零件62      33                 45         011-066

---------------------------------------
现在想通过Oracle存储过程取出当输入车辆编号(BMW01),取出车辆编号为bmw01,所有单辆汽车装机数量
并且当零件编号一致(编号一致,名称自然也一致),有效性,生产车间,单机装配数量一致时合并成一条数据
  目标结果集合为  BMW01车
零件编号   零件名称  使用数量       生产车间      有效性
A001      零件1      13                 23        002-007,011-066   (合并的)      
A002      零件10     63                 23         002-007
A002      零件10     33                 23         011-066
A003      零件22     63                 23         002-007 
A003      零件22     13                 35          011-066
A004      零件62     73                 23         002-007
A004      零件62     33                 45         011-066

-----------------------------------------

关系表:   表名:e_effrelation  
 车辆编号   有效性      bom清单表编号  
  BMW01     002-007     440017           
  BMW01     002-027     440015           
  f01       002-017     440013           
  f01       001-007     440018           
  BMW325    009-067     440022           
  f01       002-057     440054           
  BYD7      001-017     440066           

------------------------------------------------

  bom清单表  bom_plan_440018
零件编号   零件名称  使用数量       生产车间
pnumber   Fname     counNumber        chejian
A001      零件1      23                 23
A002      零件2      33                 14
A003      零件4      13                 35
A004      零件6      33                 45
   
 ------------------------------------------  
  bom清单表  bom_plan_440019

 pnumber Fname     counNumber      chejian
A001      零件1      13              45
A002      零件2      63               34
A003      零件4      63                23
A004      零件6      73               23

---------------------------------------------------
   
  bom清单表  bom_plan_440017

 pnumber Fname     counNumber    车间
A001      零件7       13          34
A022      零件10      63          34
A003      零件22      63          2
A004      零件62      73          34
    
   

4 个解决方案

#1



-- 大概这样子的,给你写个例子,你自己再补充一下

create or replace procedure spx(ptype varchar2, s out sys_refcursor) as
  v_sql    varchar2(2000);
  v_t_name varchar2(100) := '';
begin
  -- 查询出表名称
  select tname into v_table_name from table_list where m = p_type;
  -- 返回结果的语句
  v_sql := 'select * from ' || v_t_name || ' where name ... ';
  -- 返回结果
  open s for v_sql;
end;

#2


逻辑 不清楚,能帮我写出逻辑么?

#3


这有什么逻辑,你就把你的表名替换就可以了。 

#4


现在想通过Oracle存储过程取出当输入车辆编号(BMW01),取出车辆编号为bmw01,所有单辆汽车装机数量
并且当零件编号一致(编号一致,名称自然也一致),有效性,生产车间,单机装配数量一致时合并成一条数据
  目标结果集合为  BMW01车
零件编号   零件名称  使用数量       生产车间      有效性
A001      零件1      13                 23        002-007,011-066   (合并的)      
A002      零件10     63                 23         002-007
A002      零件10     33                 23         011-066
A003      零件22     63                 23         002-007 
A003      零件22     13                 35          011-066
A004      零件62     73                 23         002-007
A004      零件62     33                 45         011-066

#1



-- 大概这样子的,给你写个例子,你自己再补充一下

create or replace procedure spx(ptype varchar2, s out sys_refcursor) as
  v_sql    varchar2(2000);
  v_t_name varchar2(100) := '';
begin
  -- 查询出表名称
  select tname into v_table_name from table_list where m = p_type;
  -- 返回结果的语句
  v_sql := 'select * from ' || v_t_name || ' where name ... ';
  -- 返回结果
  open s for v_sql;
end;

#2


逻辑 不清楚,能帮我写出逻辑么?

#3


这有什么逻辑,你就把你的表名替换就可以了。 

#4


现在想通过Oracle存储过程取出当输入车辆编号(BMW01),取出车辆编号为bmw01,所有单辆汽车装机数量
并且当零件编号一致(编号一致,名称自然也一致),有效性,生产车间,单机装配数量一致时合并成一条数据
  目标结果集合为  BMW01车
零件编号   零件名称  使用数量       生产车间      有效性
A001      零件1      13                 23        002-007,011-066   (合并的)      
A002      零件10     63                 23         002-007
A002      零件10     33                 23         011-066
A003      零件22     63                 23         002-007 
A003      零件22     13                 35          011-066
A004      零件62     73                 23         002-007
A004      零件62     33                 45         011-066