★★★★★写在前面:
在工作中我们常常需要从不同的业务系统中抽取数据到自己的数据库中然后做各种分析和计算,如果在表多的时候,我们需要写大量的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;