批量添加注释以及自动生成存储过程抽取数据

★★★★★写在前面:

在工作中我们常常需要从不同的业务系统中抽取数据到自己的数据库中然后做各种分析和计算,如果在表多的时候,我们需要写大量的insert,
并且为了防止因业务系统因添加或删除字段而导致的程序出错,我们往往需要在inser和select后面指定字段,如:
insert into stg_nc_student(id,student_code,student_name,grand,phone,address…)
select id,student_code,student_name,grand,phone,address…from student@nc。

这样我们在抽数的时候就需要写大量的繁琐的基础代码,在此背景下,我们开发一个自动生成存储过程和批量添加注释的脚本,以此来提升工作效率,详细步骤以及代码如下:

本文主要分为四大块:

1、创建日志表以及对应的存储过程
2、创建注释表以及批量添加注释的存储过程
3、创建空表并生成抽数脚本
4、生成的存储过程模板

第一部分主要是创建一个添加注释的存储过程,之所以把添加注释这个单独拿出来做一个存储过程,是为了方便我们后面在插入数据的时候添加注释,每个表都需要写insert来添加日志,
甚至一个表写两条,一个是删除数据的日志,一个是插入数据的日志,有了添加日志的存储过程以后,我们直接调用该存储过程即可添加;
第二部分主要是创建添加注释的存储过程,因为我们在生成的抽数的存储过程中要添加注释,所以我们的表名要有注释,但是这个添加注释的存储过程可以给表和字段都添加注释,以后添加注释
的时候也可以用;
第三部分主要是生成抽取数据的存储过程的脚本;
第四部分是执行自动生成抽数存储过程的脚本以后生成的一个存储过程模板,相当于一个案例

1、创建日志表以及对应的存储过程 开始
1.1、创建日志表 PUB_LOG

建表语句如下:

create table PUB_LOG
(
  V_DATE          VARCHAR2(20),
  V_PROC_NAME     VARCHAR2(50),
  V_AR_NAME       VARCHAR2(30),
  V_BEGINTIME     VARCHAR2(50),
  V_RUN_LONG      VARCHAR2(50),
  V_SQLCODE       VARCHAR2(30),
  V_ERROR_MESSAGE VARCHAR2(500),
  V_EXCUMESS      VARCHAR2(1000),
  V_DIRTABLE      VARCHAR2(60),
  V_COUNT         VARCHAR2(30),
  V_ENDTIME       VARCHAR2(50)
)
tablespace BIGDATA_STG
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 256
    next 8
    minextents 1
    maxextents unlimited
    pctincrease 0
  );
-- Add comments to the table 
comment on table PUB_LOG
  is '日志表';
-- Add comments to the columns 
comment on column PUB_LOG.V_DATE
  is '执行日期';
comment on column PUB_LOG.V_PROC_NAME
  is '存储过程名称';
comment on column PUB_LOG.V_AR_NAME
  is '模块名称';
comment on column PUB_LOG.V_BEGINTIME
  is '开始时间';
comment on column PUB_LOG.V_RUN_LONG
  is '运行时长';
comment on column PUB_LOG.V_SQLCODE
  is '消息编码';
comment on column PUB_LOG.V_ERROR_MESSAGE
  is '消息内容';
comment on column PUB_LOG.V_EXCUMESS
  is '操作说明';
comment on column PUB_LOG.V_DIRTABLE
  is '操作表';
comment on column PUB_LOG.V_COUNT
  is '影响行数';
comment on column PUB_LOG.V_ENDTIME
  is '结束时间';
-- Grant/Revoke object privileges 
grant select on PUB_LOG to DM;

grant select on PUB_LOG to DW;
1.2、创建插入日志的存储过程,方便以后在插入日志的时候直接调用存储过程即可,不用每次写insert

存储过程代码如下:

create or replace procedure PORC_INSERT_LOG(
                                 ETL_DATE    VARCHAR,
                                 PROC_NAME   VARCHAR,
                                 AR_NAME     VARCHAR,
                                 BEGIN_TIME    TIMESTAMP,
                                 RUN_LONG    VARCHAR,
                                 MS_CODE     VARCHAR,
                                 MS_CONTECT  VARCHAR,
                                 SQL_CONTECT VARCHAR,
                                 SQL_TABLE   VARCHAR,
                                 SQL_COUNT   INTEGER,
                                 END_TIME    TIMESTAMP) is
begin

INSERT INTO PUB_LOG (
                                 V_DATE    ,
                                 V_PROC_NAME   ,
                                 V_AR_NAME     ,
                                 V_BEGINTIME    ,
                                 V_RUN_LONG    ,
                                 V_SQLCODE     ,
                                 V_ERROR_MESSAGE  ,
                                 V_EXCUMESS ,
                                 V_DIRTABLE   ,
                                 V_COUNT   ,
                                 V_ENDTIME    

)
VALUES (
                                 ETL_DATE    ,
                                 PROC_NAME   ,
                                 AR_NAME     ,
                                 BEGIN_TIME    ,
                                 RUN_LONG    ,
                                 MS_CODE     ,
                                 MS_CONTECT  ,
                                 SQL_CONTECT ,
                                 SQL_TABLE   ,
                                 SQL_COUNT   ,
                                 END_TIME    
);
COMMIT;

end PORC_INSERT_LOG;
2、创建注释表以及批量添加注释的存储过程 开始
2.1、创建添加注释所用到的空表

★★★★★注:因为我们在自动生成的抽数脚本中会添加大量的注释和序号等,尤其是表的注释,所以我们第二步先给创建的空表添加注释

建表语句如下:

create table TABCOL_COMMENTS
(
  TAB_NAME     VARCHAR2(500),
  TAB_COMMENTS VARCHAR2(500),
  COL_NAME     VARCHAR2(500),
  COL_COMMENTS VARCHAR2(500)
)
tablespace BIGDATA_STG
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 256
    next 256
    minextents 1
    maxextents unlimited
    pctincrease 0
  );
-- Add comments to the table 
comment on table TABCOL_COMMENTS
  is '注释表';
-- Add comments to the columns 
comment on column TABCOL_COMMENTS.TAB_NAME
  is '表名';
comment on column TABCOL_COMMENTS.TAB_COMMENTS
  is '表注释';
comment on column TABCOL_COMMENTS.COL_NAME
  is '字段名';
comment on column TABCOL_COMMENTS.COL_COMMENTS
  is '字段注释';
-- Grant/Revoke object privileges 
grant select on TABCOL_COMMENTS to DM;

grant select on TABCOL_COMMENTS to DW;
2、创建存储’comment on …'sql语句的表

★★★★★注:方便以后排错,‘PORC_COMMENT’这个存储过程是往’TABCOL_COMMENTS_LOG’插入一条,然后执行一条’comment on …’,如果存储过程报错,该表最后一条数据大概率即为有bug的sql。

建表语句如下:

create table TABCOL_COMMENTS_LOG
(
  V_LOG VARCHAR2(4000),
  NUMS  NUMBER(10)
)
tablespace BIGDATA_STG
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 256
    next 256
    minextents 1
    maxextents unlimited
    pctincrease 0
  );
-- Grant/Revoke object privileges 
grant select on TABCOL_COMMENTS_LOG to DM;

grant select on TABCOL_COMMENTS_LOG to DW;
3、创建自动批量给表和字段添加注释的存储过程

★★★★★注:该存储过程利用游标去循环执行拼接成的’comment on column…'和’comment on table…'语句,但是该语句的’from’是我们上面创建的注释表,所以我们需要维护’TABCOL_COMMENTS’这个表,一般业务系统里面有注释的话,我们只需要抽过来即可,在’user_tab_comments’和’user_col_comments’这两张表中,要是业务系统的数据库中没有注释的话,就只能我们自己维护了,维护好以后,我们执行以下存储过程,即可将注释添加进去。

存储过程代码如下:

create or replace procedure PORC_COMMENT is
 v_log varchar2(1000);
CURSOR CUR_SQL IS

with A as
(select rownum as nums,upper(tab.tab_name) as tab_name, tab.tab_comments, upper(tab.col_name) as col_name,tab.col_comments
from tabcol_comments tab /*where tab_name like 'STG_MES_TECHNICS_ONLINE%'*/),

--字段注释
B as
(SELECT 'comment on column ' || tab_name || '.' ||trim( col_name) || ' is ''' || col_comments || ''''  as sqls,nums
from A),

--表注释
C as
(select'comment on table ' || tab_name || ' is ''' || tab_comments || '''' as sqls,nums
from A),
D as 
(select distinct sqls,nums from C)
select sqls ,nums from B
union all
select sqls,nums from D;

begin

execute immediate 'truncate table tabcol_comments_log';
for cur_s in CUR_SQL LOOP
insert into tabcol_comments_log (v_log,nums) values(cur_s.sqls,cur_s.nums);
commit;
execute immediate cur_s.sqls;

end LOOP;

END PORC_COMMENT;

执行以上存储过程,即可将注释添加到表中

3、创建空表并生成抽数脚本 开始
3.1、建空表

批量生成建表语句,代码如下:

select 'create table stg_nc_'|| lower(table_name) || ' as select * from '|| lower(table_name)||'@nc where 1=0;' from user_tables@nc;

★★★★★注:把该语句执行结果拿出来在我们的数据库中执行即可创建表,@nc为业务系统数据库的dblink,这里没加过滤,大多情况只需要抽取一部分表,后面追加where条件即可

3.2、生成存储过程

★★★★★注:

1、因为我们会从不同的业务系统中建表并抽取数据,这里默认一个业务系统一个存储过程,如NC系统stg层的表统一为’stg_nc_源表名’,OA系统stg层的表统一为’stg_oa_源表名’,因此在生成存储过程的时候,我们要加过滤,以下代码中,A代码块中的where即为要生成的抽数脚本中对应的业务系统,比如我要抽DEMES系统的数据,就为where a.table_name like ‘STG_DEMES_%’;
2、生成的存储过程中,因为每个存储过程的名称不一样,所以在脚本中存储过程名称用’!!!'代替,生成存储过程以后替换为自己要改的名称即可。

生成存储过程的脚本如下

--A将某一个表的所有字段拼接到一起,并有序号和表英文名
with A as (
select  rank() over(order by a.table_name) rowno,a.table_name,xmlagg(xmlparse(content a.column_name||',')order by a.table_name).getclobval() as columns_name 
from user_tab_columns a
where a.table_name like 'STG_DEMES_%'
group by table_name
),
--B加入表注释
B as (
select a.rowno,a.table_name,b.comments as table_comments,a.columns_name
from A a
left join user_tab_comments b on a.table_name = b.table_name
order by a.rowno
),
--C拼接出单个表的存储过程
C as (
select
B.rowno,
B.table_name,
'/**************************** PART_'|| B.rowno || ' ' || B.table_name || ' ' || B.table_comments || ' 数据清除与重新插入 ****************************/'
|| chr(13) || chr(10) || 'BEGIN' 
|| chr(13) || chr(10) || '    V_DATE            := TO_CHAR(SYSDATE,' || '''YYYY-MM-DD HH24:MI:SS'''||');'
|| chr(13) || chr(10) || '    V_BEGINTIME       := SYSDATE; /*运行开始日期*/'
|| chr(13) || chr(10) || '    V_AR_NAME         := ' || '''PART_' ||  B.rowno || '''; /*修改模板名称 标志程序日志的精确位置*/'
|| chr(13) || chr(10) || '    V_DIRTABLE        :=  ''' || B.table_name ||  ''';'
|| chr(13) || chr(10) || '    V_SQL             := ' || '''TRUNCATE  TABLE '''  || ' || V_DIRTABLE ;'
|| chr(13) || chr(10) || '    EXECUTE IMMEDIATE V_SQL;'
|| chr(13) || chr(10) || '    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/'
|| chr(13) || chr(10) || '    V_EXCUMESS        := ''' || '清除 '  || B.table_name || '  ' || B.table_comments ||  ' 的数据' || ''';'
|| chr(13) || chr(10) || '    V_ENDTIME         := SYSDATE;'
|| chr(13) || chr(10) || '    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/'
|| chr(13) || chr(10) || '    V_SQLCODE         := SQLCODE; /*运行错误编码*/'
|| chr(13) || chr(10) || '    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/'
|| chr(13) || chr(10) || '    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);'
|| chr(13) || chr(10) || 'END;' 
|| chr(13) || chr(10) || 'COMMIT;' 
|| chr(13) || chr(10)
|| chr(13) || chr(10)
|| chr(13) || chr(10) || 'BEGIN' 
|| chr(13) || chr(10) || '    V_DATE            := TO_CHAR(SYSDATE,' || '''YYYY-MM-DD HH24:MI:SS'''||');'
|| chr(13) || chr(10) || '    V_BEGINTIME       := SYSDATE; /*运行开始日期*/'
|| chr(13) || chr(10) || '    V_AR_NAME         := ' || '''PART_' ||  B.rowno || '''; /*修改模板名称 标志程序日志的精确位置*/'
|| chr(13) || chr(10) || '    insert into ' || lower(B.table_name) || '(' || lower(substr(B.columns_name,1,length(B.columns_name)-1)) || ')' 
|| chr(13) || chr(10) || '    select ' || lower(substr(B.columns_name,1,length(B.columns_name)-1)) || chr(13) || chr(10) || '    from ' || lower(replace (B.table_name,'STG_DEMES_','')) || '@DE_MES ;'
|| chr(13) || chr(10) || '    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/'
|| chr(13) || chr(10) || '    V_EXCUMESS        := ''' || B.table_name || ' ' || B.table_comments ||  '数据插入''' || ';'
|| chr(13) || chr(10) || '    V_ENDTIME         := SYSDATE;'
|| chr(13) || chr(10) || '    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/'
|| chr(13) || chr(10) || '    V_SQLCODE         := SQLCODE; /*运行错误编码*/'
|| chr(13) || chr(10) || '    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/'
|| chr(13) || chr(10) || '    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);'
|| chr(13) || chr(10) || 'END;' 
|| chr(13) || chr(10) || 'COMMIT;'  as col_c
from B
),
--D将所有表的存储过程拼接到一起
D as (
select xmlagg(xmlparse(content C.col_c|| (chr(13) || chr(10) || chr(13) || chr(10)))order by C.table_name).getclobval() as col_d from C
),
--E拼接存储过程表头
E as (
select
'create or replace procedure !!! is'
|| chr(13) || chr(10) 
|| chr(13) || chr(10) || '  V_ERROR_MESSAGE VARCHAR2(255); --SQL运行信息'
|| chr(13) || chr(10) || '  V_SQLCODE       VARCHAR2(100); --SQL运行编码'
|| chr(13) || chr(10) || '  V_SQL           CLOB; --SQL'
|| chr(13) || chr(10) || '  V_EXCUMESS      VARCHAR2(500); --操作说明'
|| chr(13) || chr(10) || '  V_PROC_NAME     VARCHAR2(50); --存储过程名'
|| chr(13) || chr(10) || '  V_AR_NAME       VARCHAR2(50); --存储过程的第几部分,修改模板名称 标志程序日志的精确位置'
|| chr(13) || chr(10) || '  V_BEGINTIME     TIMESTAMP; --开始时间'
|| chr(13) || chr(10) || '  V_ENDTIME       TIMESTAMP; --结束时间'
|| chr(13) || chr(10) || '  V_RUN_LONG      VARCHAR2(100); --运行时长'
|| chr(13) || chr(10) || '  V_COUNT         INTEGER; --程序影响行数'
|| chr(13) || chr(10) || '  V_DIRTABLE      VARCHAR2(100); --执行ETL的目标表名'
|| chr(13) || chr(10) || '  V_DATE          VARCHAR2(50); --ETL日期'
|| chr(13) || chr(10) || '  --V_SYSTIME       TIMESTAMP; --系统时间'
|| chr(13) || chr(10) || '  --V_PERIOD        VARCHAR2(50); --ETL时间'
|| chr(13) || chr(10) || 'begin'
|| chr(13) || chr(10) || '  /*======================================================================'
|| chr(13) || chr(10) || '   *'
|| chr(13) || chr(10) || '   * 模板名称:业务系统STG层数据抽取'
|| chr(13) || chr(10) || '   * 过程名称:!!!'
|| chr(13) || chr(10) || '   * 参    数:'
|| chr(13) || chr(10) || '   * 功能描述:业务系统STG层数据抽取'
|| chr(13) || chr(10) || '   * 开发人员:zhangjj7@yonyou.com'
|| chr(13) || chr(10) || '   * 程序结构:'
as col_e from dual),
--F拼接存储过程目录
F as (
select b.rowno,
chr(13) || chr(10) || '   *           PART' || b.rowno || '   ' || b.table_name || '   ' || b.table_comments
as col_f from b
),
--G拼接存储过程后半部分
G as (
select
   chr(13) || chr(10) || '   * 依赖过程:'
|| chr(13) || chr(10) || '   * 后续过程:'
|| chr(13) || chr(10) || '   * 仓库  层:STG'
|| chr(13) || chr(10) || '   * 目标  表:'
|| chr(13) || chr(10) || '   * 版本历史:V1.0'
|| chr(13) || chr(10) || '   * '
|| chr(13) || chr(10) || '  ======================================================================*/'
|| chr(13) || chr(10)
|| chr(13) || chr(10) || '  V_PROC_NAME := ''!!!''; /*修改过程名*/'
|| chr(13) || chr(10) || '  --V_PERIOD    := SUBSTR(SYSDATE, 1, 7);'
|| chr(13) || chr(10) || chr(13) || chr(10) 
as col_g from dual
),
I as (
select E.col_e,xmlagg(xmlparse(content F.col_f|| '')order by F.rowno).getclobval() as col_i,col_g from E,F,G
)

select concat(concat(concat(concat(I.col_e,I.col_i),I.col_g),D.col_d),'end !!!;') from I,D
4、案例
create or replace procedure STG_DEMES is

  V_ERROR_MESSAGE VARCHAR2(255); --SQL运行信息
  V_SQLCODE       VARCHAR2(100); --SQL运行编码
  V_SQL           CLOB; --SQL
  V_EXCUMESS      VARCHAR2(500); --操作说明
  V_PROC_NAME     VARCHAR2(50); --存储过程名
  V_AR_NAME       VARCHAR2(50); --存储过程的第几部分,修改模板名称 标志程序日志的精确位置
  V_BEGINTIME     TIMESTAMP; --开始时间
  V_ENDTIME       TIMESTAMP; --结束时间
  V_RUN_LONG      VARCHAR2(100); --运行时长
  V_COUNT         INTEGER; --程序影响行数
  V_DIRTABLE      VARCHAR2(100); --执行ETL的目标表名
  V_DATE          VARCHAR2(50); --ETL日期
  --V_SYSTIME       TIMESTAMP; --系统时间
  --V_PERIOD        VARCHAR2(50); --ETL时间
begin
  /*======================================================================
   *

   * 模板名称:业务系统STG层数据抽取
   * 过程名称:STG_DEMES
   * 参    数:
   * 功能描述:业务系统STG层数据抽取
   * 开发人员:zhangjj7@yonyou.com
   * 程序结构:
   * PART1   STG_DEMES_HR_USER   人员表
   * PART2   STG_DEMES_RES_CONTENT_REPORT   报告内容
   * PART3   STG_DEMES_RES_EQMT   工艺装备管理
   * PART4   STG_DEMES_RES_EQUIPMENT   设备工装刀具表
   * PART5   STG_DEMES_RES_EQUIPMENT_PARAM   设备技术指标表
   * PART6   STG_DEMES_RES_EQUIPMENT_TYPE   设备工装刀具类型表
   * 依赖过程:
   * 后续过程:
   * 仓库  层:STG
   * 目标  表:
   * 版本历史:V1.0
   * ======================================================================*/

  V_PROC_NAME := 'STG_DEMES'; /*修改过程名*/
  --V_PERIOD    := SUBSTR(SYSDATE, 1, 7);

/**************************** PART_1 STG_DEMES_HR_USER 人员表 数据清除与重新插入 ****************************/
BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_1'; /*修改模板名称 标志程序日志的精确位置*/
    V_DIRTABLE        :=  'STG_DEMES_HR_USER';
    V_SQL             := 'TRUNCATE  TABLE ' || V_DIRTABLE ;
    EXECUTE IMMEDIATE V_SQL;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := '清除 STG_DEMES_HR_USER  人员表 的数据';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;


BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_1'; /*修改模板名称 标志程序日志的精确位置*/
    insert into stg_demes_hr_user(oid,card_no,cdefine5,cdefine4,cdefine3,cdefine2,cdefine1,user_type,admin_position,user_class,phone,station,email,user_sex,group_oid,user_deptid,tech_position,remark,user_statue,scurity_date,user_code,user_no,user_last_name,user_first_name,user_name,login_name,scurity_level)
    select oid,card_no,cdefine5,cdefine4,cdefine3,cdefine2,cdefine1,user_type,admin_position,user_class,phone,station,email,user_sex,group_oid,user_deptid,tech_position,remark,user_statue,scurity_date,user_code,user_no,user_last_name,user_first_name,user_name,login_name,scurity_level
    from hr_user@DE_MES ;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := 'STG_DEMES_HR_USER 人员表数据插入';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;

/**************************** PART_2 STG_DEMES_RES_CONTENT_REPORT 报告内容 数据清除与重新插入 ****************************/
BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_2'; /*修改模板名称 标志程序日志的精确位置*/
    V_DIRTABLE        :=  'STG_DEMES_RES_CONTENT_REPORT';
    V_SQL             := 'TRUNCATE  TABLE ' || V_DIRTABLE ;
    EXECUTE IMMEDIATE V_SQL;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := '清除 STG_DEMES_RES_CONTENT_REPORT  报告内容 的数据';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;


BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_2'; /*修改模板名称 标志程序日志的精确位置*/
    insert into stg_demes_res_content_report(oid,analyse_verdict,order_description,approved,sort_out,filing_units,storage_time)
    select oid,analyse_verdict,order_description,approved,sort_out,filing_units,storage_time
    from res_content_report@DE_MES ;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := 'STG_DEMES_RES_CONTENT_REPORT 报告内容数据插入';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;

/**************************** PART_3 STG_DEMES_RES_EQMT 工艺装备管理 数据清除与重新插入 ****************************/
BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_3'; /*修改模板名称 标志程序日志的精确位置*/
    V_DIRTABLE        :=  'STG_DEMES_RES_EQMT';
    V_SQL             := 'TRUNCATE  TABLE ' || V_DIRTABLE ;
    EXECUTE IMMEDIATE V_SQL;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := '清除 STG_DEMES_RES_EQMT  工艺装备管理 的数据';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;


BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_3'; /*修改模板名称 标志程序日志的精确位置*/
    insert into stg_demes_res_eqmt(oid,production_company,model_no,type,old_code,reject_date,next_check_date,duty_user_name,duty_user,cdefine2,cdefine1,createtime,createuser,modifytime,modifyuser,remark,detection_cycle,state,check_date,production_date,usage_count,precautions,fixture_shape,basic_claim,applicable_equipment,applicable_products,test_type,save_address,key_dimension,level_one_hz,affiliated_company,fixture_weight,fixture_material,fixture_code,fixture_name)
    select oid,production_company,model_no,type,old_code,reject_date,next_check_date,duty_user_name,duty_user,cdefine2,cdefine1,createtime,createuser,modifytime,modifyuser,remark,detection_cycle,state,check_date,production_date,usage_count,precautions,fixture_shape,basic_claim,applicable_equipment,applicable_products,test_type,save_address,key_dimension,level_one_hz,affiliated_company,fixture_weight,fixture_material,fixture_code,fixture_name
    from res_eqmt@DE_MES ;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := 'STG_DEMES_RES_EQMT 工艺装备管理数据插入';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;

/**************************** PART_4 STG_DEMES_RES_EQUIPMENT 设备工装刀具表 数据清除与重新插入 ****************************/
BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_4'; /*修改模板名称 标志程序日志的精确位置*/
    V_DIRTABLE        :=  'STG_DEMES_RES_EQUIPMENT';
    V_SQL             := 'TRUNCATE  TABLE ' || V_DIRTABLE ;
    EXECUTE IMMEDIATE V_SQL;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := '清除 STG_DEMES_RES_EQUIPMENT  设备工装刀具表 的数据';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;


BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_4'; /*修改模板名称 标志程序日志的精确位置*/
    insert into stg_demes_res_equipment(oid,id,equipment_ip,model_id,equipment_port,ip_address,workgroupoid,width,length,hight,diameter,volume,technicalnorm,ref_itemoids,ref_items,img_address,wareplaceoid,maintenance_validity,store_num,resworkname,group_name,use_method,usepartmap_version,usepart_proc,usepartname,remainderlife,warntime,storagestate,equipmenttypeoid,cdefine5,cdefine4,cdefine3,cdefine2,cdefine1,modifytime,modifyuser,createtime,createuser,usetime,planlife,neckuser,usepartno,leavecode,originalvalue,resworkoid,purpose,restrictscope,restrictcause,groupoid,validity,leave_date,place,description,manufacturer,supply,putin_date,prod_date,start_date,state,model,equipment_name,equipment_no,type)
    select oid,id,equipment_ip,model_id,equipment_port,ip_address,workgroupoid,width,length,hight,diameter,volume,technicalnorm,ref_itemoids,ref_items,img_address,wareplaceoid,maintenance_validity,store_num,resworkname,group_name,use_method,usepartmap_version,usepart_proc,usepartname,remainderlife,warntime,storagestate,equipmenttypeoid,cdefine5,cdefine4,cdefine3,cdefine2,cdefine1,modifytime,modifyuser,createtime,createuser,usetime,planlife,neckuser,usepartno,leavecode,originalvalue,resworkoid,purpose,restrictscope,restrictcause,groupoid,validity,leave_date,place,description,manufacturer,supply,putin_date,prod_date,start_date,state,model,equipment_name,equipment_no,type
    from res_equipment@DE_MES ;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := 'STG_DEMES_RES_EQUIPMENT 设备工装刀具表数据插入';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;

/**************************** PART_5 STG_DEMES_RES_EQUIPMENT_PARAM 设备技术指标表 数据清除与重新插入 ****************************/
BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_5'; /*修改模板名称 标志程序日志的精确位置*/
    V_DIRTABLE        :=  'STG_DEMES_RES_EQUIPMENT_PARAM';
    V_SQL             := 'TRUNCATE  TABLE ' || V_DIRTABLE ;
    EXECUTE IMMEDIATE V_SQL;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := '清除 STG_DEMES_RES_EQUIPMENT_PARAM  设备技术指标表 的数据';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;


BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_5'; /*修改模板名称 标志程序日志的精确位置*/
    insert into stg_demes_res_equipment_param(equipmentoid,oid,equipoid,modifytime,modifyuser,createtime,createuser,remark,min,max,sd,description,param_name)
    select equipmentoid,oid,equipoid,modifytime,modifyuser,createtime,createuser,remark,min,max,sd,description,param_name
    from res_equipment_param@DE_MES ;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := 'STG_DEMES_RES_EQUIPMENT_PARAM 设备技术指标表数据插入';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;

/**************************** PART_6 STG_DEMES_RES_EQUIPMENT_TYPE 设备工装刀具类型表 数据清除与重新插入 ****************************/
BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_6'; /*修改模板名称 标志程序日志的精确位置*/
    V_DIRTABLE        :=  'STG_DEMES_RES_EQUIPMENT_TYPE';
    V_SQL             := 'TRUNCATE  TABLE ' || V_DIRTABLE ;
    EXECUTE IMMEDIATE V_SQL;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := '清除 STG_DEMES_RES_EQUIPMENT_TYPE  设备工装刀具类型表 的数据';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;

BEGIN
    V_DATE            := TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS');
    V_BEGINTIME       := SYSDATE; /*运行开始日期*/
    V_AR_NAME         := 'PART_6'; /*修改模板名称 标志程序日志的精确位置*/
    insert into stg_demes_res_equipment_type(oid,serial_number,equipment_type_code,modifytime,modifyuser,createtime,createuser,node_code,idclass,type,description,equipment_type_name)
    select oid,serial_number,equipment_type_code,modifytime,modifyuser,createtime,createuser,node_code,idclass,type,description,equipment_type_name
    from res_equipment_type@DE_MES ;
    V_COUNT           := SQL%ROWCOUNT; /*程序影响行数*/
    V_EXCUMESS        := 'STG_DEMES_RES_EQUIPMENT_TYPE 设备工装刀具类型表数据插入';
    V_ENDTIME         := SYSDATE;
    V_RUN_LONG        := V_ENDTIME - V_BEGINTIME; /*运行时长*/
    V_SQLCODE         := SQLCODE; /*运行错误编码*/
    V_ERROR_MESSAGE   := SQLERRM; /*SQL 运行消息,写入正常日志*/
    PORC_INSERT_LOG(V_DATE,V_PROC_NAME,V_AR_NAME,V_BEGINTIME,V_RUN_LONG,V_SQLCODE,V_ERROR_MESSAGE,V_EXCUMESS,V_DIRTABLE,V_COUNT,V_ENDTIME);
END;
COMMIT;

end STG_DEMES;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值