数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
ORACLE ERP导数据(BOM清单)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

方法:把数据导入BOM清单的方法是,把数据导入接口表中,让其自动运行既可。上传文件的时候,要注意使      用ASCII字符模式。
1、自己建立一中转表
drop table cux_bill_temp;
create table cux_bill_temp(
  bill_sequence_id  number,
  assembly_item_id number,
  organization_id number,
  assembly_item  varchar2(50),   --BOM
  component_sequence_id   number,
  component_quantity   number, --组件数量
  item_num    number, --项目序列
  operation_seq_num   number, --工序序列
  component_item_id   number,
  component_item   varchar2(50),  --组件
  PLANNING_FACTOR   number,  --计划%d100
  component_yield_factor  number,  --产出率d1
  wip_supply_type   number,  --供应类型
  supply_type    varchar2(50),
  supply_subinventory   varchar2(50), --供应子库存
  OPTIONAL    number,  --可选的
  OPTIONAL_disp    varchar2(10), --可选的
  MUTUALLY_EXCLUSIVE_OPTIONS   number,  --互不相容
  MUTUALLY_EXCLUSIVE_O_disp  varchar2(10), --互不相容
  attribute1    varchar2(50),   --排序号
  row_num    number)
;
2、删除中转表中的数据
   delete cux_bill_temp;
3、把要导入的数据放在扩展名为*.csv的文件中,且要相对应于中转表的字段,本例中的文件名为bill.csv。
   另外的脚本文件为bill.ctl,其内容如下:
options (skip=1)  //跳过第一行,一般第一行为其字段说明
LOAD DATA
INFILE bill.csv  //bill.csv为数据文件
APPEND

INTO TABLE cux_bill_temp
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(与中转表相对应的字段列表)
登录进入ORACLE数据库服务器,利用命令:(sqlload 用户名/密码@数据库名)载入文件bill.csv的数据入中转表。
4、查看中转表中的记录数(以备导入数据后进行对比)
   select count(*) from cux_bill_temp;
5、去除导入时在表bill.csv中的关键字段的空格字符,以免影响导入。
   update cux_bill_temp
   set ASSEMBLY_ITEM=replace(ASSEMBLY_ITEM,' ',''),
   COMPONENT_ITEM=replace(COMPONENT_ITEM,' ','');
6、查看是否有重复的选项(既是否重复了Item)
  select assembly_item,component_item,min(row_num),count(*)
  from cux_bill_temp
  group by assembly_item,component_item
  having count(*)>1;
 如果有重复的Item,则要删除(或是重新合并)
delete cux_bill_temp
where row_num in (select min(row_num) from cux_bill_temp
  group by assembly_item,component_item
  having count(*)>1);
以下步骤为选做(如有重复才做,没有重复不做7-10)
7、再重新建立一个临时表(对于有重复数据,则只取一条数据,现取row_num最小的一条)
  drop table cux_bill_a;

create table cux_bill_a
as
select assembly_item,
 component_item,
 component_quantity,
 PLANNING_FACTOR,
 component_yield_factor,
 supply_type,
 supply_subinventory,
 OPTIONAL_disp,
 MUTUALLY_EXCLUSIVE_O_disp,
 attribute1,
 min(row_num) row_num
from cux_bill_temp
group by assembly_item,
 component_item,
 component_quantity,
 PLANNING_FACTOR,
 component_yield_factor,
 supply_type,
 supply_subinventory,
 OPTIONAL_disp,
 MUTUALLY_EXCLUSIVE_O_disp,
 attribute1;
8、删除cux_bill_temp表
  delete cux_bill_temp;
9、再重cux_bill_a表中把数据导入给cux_bill_temp表,完成把重复数据剔除的功能
insert into cux_bill_temp(
assembly_item,
 component_item,
 component_quantity,
 PLANNING_FACTOR,
 component_yield_factor,
 supply_type,
 supply_subinventory,
 OPTIONAL_disp,
 MUTUALLY_EXCLUSIVE_O_disp,
 attribute1,
 row_num)
select assembly_item,
 component_item,
 component_quantity,
 PLANNING_FACTOR,
 component_yield_factor,
 supply_type,
 supply_subinventory,
 OPTIONAL_disp,
 MUTUALLY_EXCLUSIVE_O_disp,
 attribute1,
 row_num
from cux_bill_a;
10、删除表cux_bill_a
   drop table cux_bill_a;
11、再检查一次表,是否有重复的数据
   select assembly_item,component_item,min(row_num),count(*)
from cux_bill_temp
group by assembly_item,component_item
having count(*)>1;
12、查看在mtl_system_items表中,既是在库存表中,有没有不存在的Item.
select distinct item
from (
select distinct assembly_item item
from cux_bill_temp b
where not exists (select null from mtl_system_items where segment1=b.assembly_item and organization_id=2)
union
select distinct component_item item
from cux_bill_temp b
where not exists (select null from mtl_system_items where segment1=b.component_item and organization_id=2)
)
order by item;
13、如果在mtl_system_items中,有不存在的物品ITEM时,要把其删除(或是把这些物品Item导入到系统中)
  删除:delete cux_bill_temp b
        where  not exists (select null from mtl_system_items where segment1=b.component_item and organization_id=2);
        delete cux_bill_temp a
        where not exists  (select null from mtl_system_items where segment1=a.assembly_item  and organization_id=2);
14、对没有物品Item的进行处理,把其放入另一临时表cux_item_temp中(以备查询及导入mtl_system_items表中)
   delete cux_item_temp;
insert into cux_item_temp(
 segment1,description)
select distinct item,item
from (
select distinct assembly_item item
from cux_bill_temp b
where not exists (select null from mtl_system_items where segment1=b.assembly_item and organization_id=2)
union
select distinct component_item item
from cux_bill_temp b
where not exists (select null from mtl_system_items where segment1=b.component_item and organization_id=2)
)
;

将找到没有ITEM的BOM数据放到另一个表中,以备下次ITEM导入后在导BOM
create table cux_bom_temp1
select distinct item
from (
select distinct assembly_item item
from cux_bill_temp b
where not exists (select null from mtl_system_items where segment1=b.assembly_item and organization_id=2)
union
select distinct component_item item
from cux_bill_temp b
where not exists (select null from mtl_system_items where segment1=b.component_item and organization_id=2)
)
-----------------------------------------------------------------------------------------------------------

15、从表mtl_system_items中把物品的编码ID加入中转表cux_bill_temp表(从项目主组织)中
  update cux_bill_temp b
     set assembly_item_id=(select inventory_item_id from mtl_system_items
   where segment1=b.assembly_item and organization_id=2),
         component_item_id=(select inventory_item_id from mtl_system_items
                             where segment1=b.component_item and organization_id=2);
16、查看是否有没有物品ID的编码存在(既没有物品的ID被导入临时表cux_bill_temp中)
   select row_num
     from cux_bill_temp
    where assembly_item_id is null or component_item_id is null;
17、对其中导入的数据进行处理
   update cux_bill_temp
      set OPTIONAL=1
    where upper(OPTIONAL_disp) like 'Y%';

   update cux_bill_temp
      set OPTIONAL=2
    where OPTIONAL is null;

   update cux_bill_temp
      set MUTUALLY_EXCLUSIVE_OPTIONS=1
    where upper(MUTUALLY_EXCLUSIVE_O_DISP) like 'Y%';

   update cux_bill_temp
      set MUTUALLY_EXCLUSIVE_OPTIONS=2
    where MUTUALLY_EXCLUSIVE_O_DISP is null;
18、查看cux_bill_temp中的数据处理是否有漏
  select count(*)
    from cux_bill_temp
   where OPTIONAL is null
      or MUTUALLY_EXCLUSIVE_OPTIONS is null
      or assembly_item_id is null
      or component_item_id is null;
19、更新其内的WIP_SUPPLY_TYPE;
  update cux_bill_temp
     set WIP_SUPPLY_TYPE=6
   where component_item like 'B%';
20、删除表中的包(cux_bill_temp中),其相对应于表bom_bill_of_materials(既在表中已经存在了些选项包,不必导入包头,只需导入包内容既可)
  delete cux_bill_temp t
where exists (select null from bom_bill_of_materials where assembly_item_id=t.assembly_item_id and organization_id=2);
21、利用已经写好的包写入数据(既写入接口表bom_bill_of_mtls_interface)
   exec cux_bom_temp.insert_bill_15(1);
select count(*) from cux_bill_temp temp
where exits (select null from bom_inventory_components  b
           where temp.bill_sequence_id=b.bill_sequence_id
             and temp.component_item_id=b.component_item_id);

delete cux_bill_temp temp
where exists (select null from bom_inventory_components  b
           where b.bill_sequence_id=temp.bill_sequence_id
             and b.component_item_id=temp.component_item_id);

   exec cux_bom_temp.insert_bill_10(1);
22、对写入的数据在接口表中的情况进行查看
   select count(*) from bom_bill_of_mtls_interface;
23、接着更新
  exec cux_bom_temp.insert_bill_15(1);

  select count(*) from cux_bill_temp where bill_sequence_id is null;
 
  exec cux_bom_temp.insert_bill_20(1);
去提交请求

select count(*) from bom_inventory_comps_interface;
(导入成功后)对组件进行排序
  exec cux_bom_temp.update_bill_item_num4;

  select count(*) from bom_inventory_comps_interface;
24、对于接口表中的数据进行导入
delete bom_bill_of_mtls_interface;
insert into bom_bill_of_mtls_interface(
 assembly_type,assembly_item_id,
 organization_id,
        process_flag,transaction_type)
select  distinct 1,assembly_item_id,
 1,
 1,'CREATE'
from cux_bill_temp;




相关文章

相关软件