0
点赞
收藏
分享

微信扫一扫

资产数据导入数据拆分

谁知我新 2022-07-12 阅读 42

资产数据导入数据拆分

​ <font color="#FF0000">注意点:</font>

​ <font color="#FF0000">导入数据前核查是否缺少关键字段,如:资产编号,资产金额,数量,入库日期,领用人,使用单位,分类号,现状</font>

​ <font color="#FF0000">拆分数据如果有折旧也需要拆分</font>

​ <font color="#FF0000">数据字典需要转换</font>

1.导入学校提供的excel数据到临时库sec_import

打开excel,复制表头

image-20220517091205113

创建和表头一样的表到sec_import

create  table   sec_import.ustb_20220315(
资产编号  varchar2(4000), 
资产名称  varchar2(4000), 
明细类别  varchar2(4000), 
资产分类代码  varchar2(4000), 
数量  varchar2(4000), 
价值  varchar2(4000), 
财务入账日期  varchar2(4000), 
现状  varchar2(4000), 
使用部门编号  varchar2(4000), 
使用部门  varchar2(4000), 
价值类型  varchar2(4000), 
使用人  varchar2(4000), 
存放地点  varchar2(4000), 
折旧摊销状态 varchar2(4000)
)

使用kettle工具导入,导入过后核查金额数量是否和excel一致

2.对应资产表字段导入到资产的临时表

创建一个和资产表表结构一样的临时表

create table sec_import.ustb_assets20220315 as select * from sec_bl_assets.assets where 1=2;  
--复制表结构并且创建表名为ustb_assets20220315

对应字段过后插入到刚刚创建的临时表

insert into ustb_assets20220315
(
code,
name,
type_name,
assets_sort_gb_code,
num,
price,
stock_date,
state,
base_dep_code,
base_dep_name,
jiazlx,
base_teacher_name_keeper,
base_room_name,
ZJZT,
assets_sort_code,
country,
belong,
attach_num,
attach_price,
source,
direction,
type
)
select  
资产编号  , 
资产名称  , 
明细类别  , 
资产分类代码  , 
数量  , 
价值  , 
to_date(财务入账日期 ,'yyyy-mm-dd') , 
现状  , 
使用部门编号  , 
使用部门  , 
价值类型  , 
使用人  , 
存放地点  , 
'02' 折旧摊销状态 ,
'0000','156','1','0','0','1','1',
'furniture'
from ustb_20220315

3.数据拆分(如果资产数量都为一就跳过这一步)

由于资产系统的资产数量都是1,所以需要拆分,不过也有特殊情况不需要拆分,因此在拆分数据的时候询问发起任务的人数据是否需要拆分

先创建一个和资产表一个一样的临时表用于存放拆分过后的数据

 create table ustb_assets20220315_cf as select * from sec_bl_assets.assets where 1=2;

核查拆分的数据,数量大于1的是否都是家具,如果设备也有大于1的也要询问任务发起人,设备是否也要拆分

select distinct type from ustb_assets20220315 where num>1

核查最大的数量是多少

select max(num ) from ustb_assets20220315

修改拆分的存储过程

开始和结束都有这个存储过程名称IMPORT_FURNITURE_QXN,每次根据自己情况修改
--开始
create or replace procedure IMPORT_FURNITURE_QXN(prmMsg out varchar2) is
  imCount number;
  fNum    number;
  i       number;
  fCode   varchar2(32);
begin
  --查询出需要转入的家具信息并循环生成子家具信息
  imCount := 0;
  --for循环 括号里面的是导入的资产临时表,需要修改条件限制拆分的数据
  for FurnitureData in (
  select *  from sec_import.ustb_assets20220315 where    NUM>1 and type='furniture'
                        ) loop
    imCount := imCount + 1;
    --获取数量
    fNum := to_number(TRIM(FurnitureData.NUM));
    i    := 0;
    while i < fNum loop
      --计算家具子号编码。
      i := i + 1;
      if i <= 9999 then
        fCode := lpad(i, 4, '0');
      else
        fCode := to_char(i + 30961, 'XXXX');
      end if;
--插入拆分数据到新创建的数据拆分表,这里需要自己添加缺少的字段,temp8到temp6这几个字段的位置不要变动
INSERT INTO SEC_IMPORT.ustb_assets20220315_cf
(
temp8,
FURNITURE_BATCH_CODE,
CODE,
PRICE,
NUM,
TEMP7,
TEMP6,
name,
type_name,
stock_date,
state,
base_dep_code,
base_dep_name,
jiazlx,
base_teacher_name_keeper,
base_room_name,
ZJZT,
country,
belong,
attach_num,
attach_price,
source,
direction,
type,
ASSETS_SORT_CODE,
ASSETS_SORT_NAME,
ASSETS_SORT_GB_CODE,
ASSETS_SORT_GB_NAME
)
      values
        (
TRIM(FurnitureData.LEIJZJ),
  TRIM(FurnitureData.code),
   TRIM(FurnitureData.CODE)||fCode,
   TRIM(FurnitureData.PRICE)/TRIM(FurnitureData.NUM),
   '1',
   TRIM(FurnitureData.PRICE),
   TRIM(FurnitureData.NUM),
TRIM(FurnitureData.NAME), 
TRIM(FurnitureData.type_name),
TRIM(FurnitureData.stock_date),
TRIM(FurnitureData.state),
TRIM(FurnitureData.base_dep_code),
TRIM(FurnitureData.base_dep_name),
TRIM(FurnitureData.jiazlx),
TRIM(FurnitureData.base_teacher_name_keeper),
TRIM(FurnitureData.base_room_name),
TRIM(FurnitureData.ZJZT),
TRIM(FurnitureData.country),
TRIM(FurnitureData.belong),
TRIM(FurnitureData.attach_num),
TRIM(FurnitureData.attach_price),
TRIM(FurnitureData.source),
TRIM(FurnitureData.direction),
TRIM(FurnitureData.type),
TRIM(FurnitureData.ASSETS_SORT_CODE),
TRIM(FurnitureData.ASSETS_SORT_NAME),
TRIM(FurnitureData.ASSETS_SORT_GB_CODE),
TRIM(FurnitureData.ASSETS_SORT_GB_NAME)
);

    end loop;

  end loop;
  prmMsg := '成功导入' || imCount || '批家具。';
  commit;
exception
  when others then
    prmMsg := '导入失败。' || sqlerrm;
    rollback;
end IMPORT_FURNITURE_QXN;
--结束

存储过程修改完毕直接创建就会在image-20220517094219708下面查看

找到创建的存储过程查看是否报错image-20220517094306280

image-20220517094321115就是有错,就需要自己查看错误并改正

没有错误就直接右键测试 执行存储过程

image-20220517094927117

执行成功,输出

image-20220517095004556

查看数据拆分表是否有数据,比较金额数量是否和拆分前一致

select count(*),sum(price) from ustb_assets20220315_cf;
select sum(num), sum(price) from sec_import.ustb_assets20220315 where    NUM>1 and type='furniture'

金额不对用下面的sql补全

--金额是否对  
SELECT to_char(SUM(差距),'fm90.09') FROM (
SELECT  FURNITURE_BATCH_CODE,TEMP7,EE ,TO_NUMBER(TEMP7)-TO_NUMBER(EE)  差距 FROM (
SELECT     FURNITURE_BATCH_CODE,TEMP7,SUM(PRICE)  EE FROM  SEC_IMPORT.asss_cf   WHERE TEMP6>1   GROUP BY FURNITURE_BATCH_CODE,TEMP7,TEMP6) WHERE TEMP7<>EE
)

--获取拆分金额不对的资产数据
SELECT  'update asss_cf set price =price'||'' || case when cj like '-%'  then cj else '+'||cj end   || '' ||'     where code =' || '''' || FURNITURE_BATCH_CODE||'0001' || '''' || ';',cj
  FROM (
SELECT  FURNITURE_BATCH_CODE,TEMP7,EE ,to_char(TO_NUMBER(TEMP7)-TO_NUMBER(EE),'fm90.09') cj,cnt FROM (
SELECT     FURNITURE_BATCH_CODE,TEMP7,SUM(PRICE)  EE ,count(*) cnt FROM  SEC_IMPORT.asss_cf   WHERE TEMP6>1   GROUP BY FURNITURE_BATCH_CODE,TEMP7,TEMP6) WHERE TEMP7<>ee
);

最后把数量为1的数据插入到拆分表,形成完整的数据

insert into ustb_assets20220315_cf select * from ustb_assets20220315 where num='1';

4.更新相关缺少的数据:单位编号,领用人工号,6大类分类号,16大类分类号

​ 更新完成过后插入主表sec_bl_assets, 登陆系统查询

5.插入入账记录到sec_assets.assets_work

insert into sec_assets.assets_work
  (id,
   WORK_STATE,
   WORK_TIME,
   WORK_PRICE,
   WORK_DEP,
   WORK_REMARK,
   WORK_AVAILABLE,
   WORK_TEACHER,
   base_dep_code,
   base_dep_name,
   code,
   assets_sort_code,
   name,
   model,
   spec,
   price,
   PRODUCER,
   PROVIDER,
   INVOICE_NO,
   FACTORY_NO,
   FACTORY_DATE,
   PURCHASE_DATE,
   base_room_name,
   state,
   OUTLAY_SUBJECT,
   direction,
   source,
   CGZZXS,
   keeper_name,
   PURCHASER,
   ASSESSOR,
   STOCK_DATE,
   remark,
   assets_sort_gb_code,
   assets_sort_gb_name,
   FINANCE_BILL,
   bill_no,
   SR_NO,
   OUTLAY_CARD_NAME,
   TEMP1,
   TEMP2,
   TEMP3,
   TEMP4,
   TEMP5,
   country,
   attach_num,
   attach_price,
   type,
   CHECK_METHOD,
   LAST_CHECK_DATE,
   /*   CHECK_RESULT,*/
   CHECKER,
   FINANCE_DATE,
   FINANCE_ASSESSOR,
   CAMPUS,
   TEMP7,
   SERVICE_DATE,
   num,
   JIAZLX,
   DEPRESIATION_METHOD,
   YUJSMZL,
   UNIT,
   base_teacher_no_keeper,
   temp8,
   belong,
   temp9,
   DISPDATE)
  select sec_base.seq_assets_default.nextval,
         '1',
         stock_date,
         0,
         null,
         '入账',
         /*0,*/
         1,
         null,
         base_dep_code,
         base_dep_name,
         code,
         assets_sort_code,
         name,
         model,
         spec,
         price,
         PRODUCER,
         PROVIDER,
         INVOICE_NO,
         FACTORY_NO,
         FACTORY_DATE,
         PURCHASE_DATE,
         base_room_name,
         state,
         OUTLAY_SUBJECT,
         direction,
         source,
         CGZZXS,
         keeper_name,
         PURCHASER,
         ASSESSOR,
         STOCK_DATE,
         remark,
         assets_sort_gb_code,
         assets_sort_gb_name,
         FINANCE_BILL,
         bill_no,
         SR_NO,
         OUTLAY_CARD_NAME,
         TEMP1,
         TEMP2,
         TEMP3,
         TEMP4,
         TEMP5,
         country,
         attach_num,
         attach_price,
         type,
         CHECK_METHOD,
         LAST_CHECK_DATE,
         /*   CHECK_RESULT,*/
         CHECKER,
         FINANCE_DATE,
         FINANCE_ASSESSOR,
         CAMPUS,
         TEMP7,
         SERVICE_DATE,
         num,
         JIAZLX,
         DEPRESIATION_METHOD,
         YUJSMZL,
         UNIT,
         base_teacher_no_keeper,
         temp8,
         belong,
         temp9,
         DISPDATE
    from sec_bl_assets.assets;  --这个改成你导入的临时表

--如果没有sequence  就 查询最大的 创建一个
SELECT  MAX(ID) FROM  sec_assets.assets_work WHERE LENGTH(ID)='11'

create sequence SEQ_ASSETSTMP
minvalue 1
maxvalue 999999999999999
start with 3761630
increment by 1
cache 10;

最后要修改 系统的system_sequence  的值为你最后最大的值往后加几个
select  a.*,rowid from system_sequence  a where code ='assets_default'
举报

相关推荐

0 条评论