方法:把數據導入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;