NC65HR模块同步元数据、同步模板后系统字段顺序乱了的BUG
现象描述:系统设置好模板后,因特殊情况又去增加了元数据、同步了模板,可能会导致模板上字段的显示顺序等错乱。
思路:增加元数据前先备份,同步元数据、同步模板后恢复字段顺序。
参考SQL如下:
--写在前面S
--根据模板名称,查询单据的信息,找到本单据的Pk_billtemplet
select * from pub_billtemplet where bill_templetcaption like '%入职登记-1(未上系统单位)测试%'
--模板具体信息
select * from PUB_BILLTEMPLET_B where pk_billtemplet = '1001A1100000001D8TWA' and table_code='bd_psndoc' and itemkey='sex'
--根据信息集名称,查询单据的信息,找到本单据的Pk_billtemplet
select * from hr_infoset where infoset_name like '岗位基本信息'
--信息集字段
select * from hr_infoset_item where pk_infoset = '1002Z71000000000UO7T' and item_name in ('竞业限制')
--写在前面E
--1、创建备份表的表结构
select dbms_metadata.get_ddl('TABLE','HR_INFOSET_ITEM') from dual;--查看建表语句HR_INFOSET_ITEM表名称,必须大写
--1.1 备份模板pub_billtemplet表的表结构
CREATE TABLE "NC65"."PUB_BILLTEMPLET_BACK"
("BILL_TEMPLETCAPTION" VARCHAR2(90),
"BILL_TEMPLETNAME" VARCHAR2(60),
"DEVORG" VARCHAR2(20),
"DIVIDERPROPORTION" VARCHAR2(30),
"DR" NUMBER(10,0) DEFAULT 0,
"FUNCCODE" VARCHAR2(40),
"LAYER" NUMBER(38,0),
"METADATACLASS" VARCHAR2(100),
"MODEL_TYPE" char(1),
"MODULECODE" VARCHAR2(10),
"NODECODE" VARCHAR2(30),
"OPTIONS" VARCHAR2(4000),
"PK_BILLTEMPLET" char(20) NOT NULL ENABLE,
"PK_BILLTYPECODE" VARCHAR2(10),
"PK_CORP" VARCHAR2(20),
"PK_ORG" char(20),
"RESID" VARCHAR2(30),
"SHAREFLAG" char(1),
"TS" char(19) DEFAULT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),
"VALIDATEFORMULA" VARCHAR2(1000),
CONSTRAINT "PUB_BILLTEMPLET_BACK" PRIMARY KEY ("PK_BILLTEMPLET")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_INDEX01" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 262144 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_DATA01"
select * from PUB_BILLTEMPLET_BACK20200810
--1.2 备份模板具体信息pub_billtemplet_b表的表结构
CREATE TABLE "NC65"."PUB_BILLTEMPLET_B_BACK"
( "CARDFLAG" NUMBER(38,0) DEFAULT 1,
"DATATYPE" NUMBER(38,0) DEFAULT 0,
"DEFAULTSHOWNAME" VARCHAR2(150),
"DEFAULTVALUE" VARCHAR2(1000),
"DR" NUMBER(10,0) DEFAULT 0,
"EDITFLAG" NUMBER(38,0) DEFAULT 1,
"EDITFORMULA" VARCHAR2(1000),
"FOREGROUND" NUMBER(38,0) DEFAULT 0,
"HYPERLINKFLAG" char(1),
"IDCOLNAME" VARCHAR2(50),
"INPUTLENGTH" NUMBER(38,0) DEFAULT 20,
"ITEMKEY" VARCHAR2(50) NOT NULL ENABLE,
"ITEMTYPE" NUMBER(38,0) DEFAULT 0,
"LEAFFLAG" char(1) DEFAULT 'N',
"LISTFLAG" NUMBER(38,0) DEFAULT 1,
"LISTHYPERLINKFLAG" char(1),
"LISTSHOWFLAG" char(1),
"LISTSHOWORDER" NUMBER(38,0) DEFAULT null,
"LOADFORMULA" VARCHAR2(1000),
"LOCKFLAG" NUMBER(38,0) DEFAULT 0,
"METADATAPATH" VARCHAR2(100),
"METADATAPROPERTY" VARCHAR2(100),
"METADATARELATION" VARCHAR2(2000),
"NEWLINEFLAG" char(1) DEFAULT 'N',
"NULLFLAG" NUMBER(38,0) DEFAULT 0,
"OPTIONS" VARCHAR2(400),
"PK_BILLTEMPLET" char(20) NOT NULL ENABLE,
"PK_BILLTEMPLET_B" char(20) NOT NULL ENABLE,
"PK_CORP" VARCHAR2(20) DEFAULT '@@@@',
"POS" NUMBER(38,0) DEFAULT 0,
"REFTYPE" VARCHAR2(1000),
"RESID" VARCHAR2(30),
"RESID_TABNAME" VARCHAR2(30),
"REVISEFLAG" char(1) DEFAULT 'N',
"SHOWFLAG" NUMBER(38,0) DEFAULT 1,
"SHOWORDER" NUMBER(38,0) DEFAULT 0,
"TABLE_CODE" VARCHAR2(40),
"TABLE_NAME" VARCHAR2(75),
"TOTALFLAG" NUMBER(38,0) DEFAULT 0,
"TS" char(19) DEFAULT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),
"USERDEFFLAG" char(1),
"USERDEFINE1" VARCHAR2(50),
"USERDEFINE2" VARCHAR2(50),
"USERDEFINE3" VARCHAR2(50),
"USEREDITFLAG" NUMBER(38,0) DEFAULT 0,
"USERFLAG" NUMBER(38,0) DEFAULT 1,
"USERREVISEFLAG" char(1),
"USERSHOWFLAG" NUMBER(38,0) DEFAULT 0,
"VALIDATEFORMULA" VARCHAR2(1000),
"WIDTH" NUMBER(38,0) DEFAULT 1,
CONSTRAINT "PUB_BILLTEMPLET_B_BACK" PRIMARY KEY ("PK_BILLTEMPLET_B")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_INDEX01" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 262144 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_DATA01"
select * from PUB_BILLTEMPLET_B_BACK
--1.3 备份信息集表的表结构
CREATE TABLE "NC65"."HR_INFOSET_BACK"
( "DR" NUMBER(10,0) DEFAULT 0,
"INFOSET_CODE" VARCHAR2(128),
"INFOSET_NAME" VARCHAR2(192),
"INFOSET_NAME2" VARCHAR2(192),
"INFOSET_NAME3" VARCHAR2(192),
"INFOSET_NAME4" VARCHAR2(192),
"INFOSET_NAME5" VARCHAR2(192),
"INFOSET_NAME6" VARCHAR2(192),
"INFOSET_TYPE" NUMBER(38,0),
"LOOK_HISTORY_FLAG" char(1),
"MAIN_TABLE_FLAG" char(1) DEFAULT 'N',
"MEMO" VARCHAR2(1536),
"META_DATA" VARCHAR2(128),
"META_DATA_ID" VARCHAR2(128) DEFAULT '~',
"PK_FIELD_CODE" VARCHAR2(128),
"PK_GROUP" VARCHAR2(20) DEFAULT '~',
"PK_INFOSET" char(20) NOT NULL ENABLE,
"PK_INFOSET_SORT" VARCHAR2(20) NOT NULL ENABLE,
"PK_ORG" VARCHAR2(20) DEFAULT '~',
"RECORD_CHARACTER" NUMBER(38,0) DEFAULT 0,
"RESID" VARCHAR2(128),
"RESPATH" VARCHAR2(128),
"SHOWORDER" NUMBER(38,0),
"SYNC_MAIN_CODE" VARCHAR2(28),
"SYNC_MAIN_TABLE" char(1),
"TABLE_CODE" VARCHAR2(128),
"TS" char(19) DEFAULT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),
"USER_DEF_FLAG" char(1) DEFAULT 'Y',
"VO_CLASS_NAME" VARCHAR2(128),
CONSTRAINT "HR_INFOSET_BACK" PRIMARY KEY ("PK_INFOSET")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_INDEX01" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 262144 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_DATA01"
select * from HR_INFOSET_BACK
--1.4 备份信息集字段表的表结构
CREATE TABLE "NC65"."HR_INFOSET_ITEM_BACK"
( "ACCESSOR_CLASSNAME" VARCHAR2(256),
"CALCULATION" char(1),
"CLASS_ID" VARCHAR2(50),
"CREATIONTIME" char(19),
"CREATOR" VARCHAR2(28),
"CUSTOM_ATTR" char(1) DEFAULT 'Y',
"DATA_TYPE" NUMBER(38,0),
"DATA_TYPE_ID" VARCHAR2(50),
"DATA_TYPE_STYLE" NUMBER(38,0),
"DEFAULT_VALUE" VARCHAR2(512),
"DESCRIPTION" VARCHAR2(768),
"DR" NUMBER(10,0) DEFAULT 0,
"DYNAMIC_FLAG" char(1),
"ENUM_ID" VARCHAR2(50) DEFAULT '~',
"FIXED_LENGTH" char(1),
"HELP" VARCHAR2(1536),
"HIDED" char(1),
"ID" VARCHAR2(50),
"IS_ACTIVE" char(1),
"IS_AUTHEN" char(1),
"ITEM_CODE" VARCHAR2(28) NOT NULL ENABLE,
"ITEM_FORMULA" VARCHAR2(1500),
"ITEM_FORMULA_SQL" VARCHAR2(1500),
"ITEM_NAME" VARCHAR2(192),
"ITEM_NAME2" VARCHAR2(192),
"ITEM_NAME3" VARCHAR2(192),
"ITEM_NAME4" VARCHAR2(192),
"ITEM_NAME5" VARCHAR2(192),
"ITEM_NAME6" VARCHAR2(192),
"MAX_LENGTH" NUMBER(38,0),
"MAX_VALUE" VARCHAR2(50),
"META_DATA" VARCHAR2(192),
"MIN_VALUE" VARCHAR2(50),
"MODIFIEDTIME" char(19),
"MODIFIER" VARCHAR2(28),
"NOT_SERIALIZE" char(1),
"NULLABLE" char(1),
"PK_GROUP" VARCHAR2(20) DEFAULT '~',
"PK_INFOSET" VARCHAR2(20) NOT NULL ENABLE,
"PK_INFOSET_ITEM" char(20) NOT NULL ENABLE,
"PK_MAIN_ITEM" VARCHAR2(20) DEFAULT '~',
"PK_ORG" VARCHAR2(20) DEFAULT '~',
"PRECISE" NUMBER(38,0) DEFAULT 4,
"READ_ONLY" char(1),
"REF_LEAF_FLAG" char(1),
"REF_MODEL_NAME" VARCHAR2(192) DEFAULT '~',
"RESID" VARCHAR2(128),
"RESPATH" VARCHAR2(128),
"SHOWORDER" NUMBER(38,0),
"SUB_FORMULA" VARCHAR2(1500),
"SUB_FORMULA_SQL" VARCHAR2(1500),
"TS" char(19) DEFAULT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),
"UNIQUE_FLAG" char(1) DEFAULT 'N',
"VISIBILITY" NUMBER(38,0),
CONSTRAINT "HR_INFOSET_ITEM_BACK" PRIMARY KEY ("PK_INFOSET_ITEM")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_INDEX01" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 262144 NEXT 262144 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "NNC_DATA01"
select * from HR_INFOSET_ITEM_BACK
--2、备份表内容
--2.1 备份pub_billtemplet表内容
delete from PUB_BILLTEMPLET_BACK;--(备份前先删除备份表pub_billtemplet_back的表内容)
insert into PUB_BILLTEMPLET_BACK(select * from pub_billtemplet)
--2.2 备份pub_billtemplet_b表内容
delete from PUB_BILLTEMPLET_B_BACK;--(备份前先删除备份表pub_billtemplet_b_back的表内容)
insert into PUB_BILLTEMPLET_B_BACK(select * from pub_billtemplet_b)
--2.3 备份hr_infoset表内容
delete from HR_INFOSET_BACK;--(备份前先删除备份表HR_INFOSET_BACK的表内容)
insert into HR_INFOSET_BACK(select * from HR_INFOSET)
--2.4 备份hr_infoset_item表内容
delete from HR_INFOSET_ITEM_BACK;--(备份前先删除备份HR_INFOSET_ITEM_BACK表的表内容)
insert into HR_INFOSET_ITEM_BACK(select * from HR_INFOSET_ITEM)
--3、查看备份内容
select * from PUB_BILLTEMPLET_BACK20200810 ORDER BY PK_BILLTEMPLET
select * from PUB_BILLTEMPLET_B_BACK20200810 where pk_billtemplet = '1001111000000014L7OO' ORDER BY PK_BILLTEMPLET_B
select * from HR_INFOSET_BACK20200810 ORDER BY PK_INFOSET
select * from HR_INFOSET_ITEM_BACK20200810 where pk_infoset = '1001111000000014KMNP' ORDER BY PK_infoset_item
--4、查询备份的表与被备份的表不同的数据
--4.1pub_billtemplet表与pub_billtemplet_back表
select test.* from(
select * from pub_billtemplet
minus
select * from pub_billtemplet_back) test
union all
select test1.* from(
select * from pub_billtemplet_back
minus
select * from pub_billtemplet) test1;
--4.2pub_billtemplet_b表与pub_billtemplet_b_back表
select test.* from(
select * from pub_billtemplet_b
minus
select * from pub_billtemplet_b_back) test
union all
select test1.* from(
select * from pub_billtemplet_b_back
minus
select * from pub_billtemplet_b) test1;
--4.3hr_infoset表与hr_infoset_back表
select test.* from(
select * from hr_infoset
minus
select * from hr_infoset_back) test
union all
select test1.* from(
select * from hr_infoset_back
minus
select * from hr_infoset) test1;
--4.4pub_billtemplet_b表与pub_billtemplet_b_back表
select test.* from(
select * from hr_infoset_item
minus
select * from hr_infoset_item_back) test
union all
select test1.* from(
select * from hr_infoset_item_back
minus
select * from hr_infoset_item) test1;
--5、恢复数据
--5.1 以恢复模板具体信息pub_billtemplet_b表,列字段显示顺序LISTSHOWORDER字段为例
--查看顺序变化了的字段(trnsreason异动原因字段为例)
select
pub_billtemplet_b.LISTSHOWORDER,
pub_billtemplet_b_back.LISTSHOWORDER as backLISTSHOWORDER,
pub_billtemplet_b.itemkey,
pub_billtemplet_b.pk_billtemplet_b,
pub_billtemplet_b.REFTYPE
from pub_billtemplet_b
LEFT OUTER JOIN pub_billtemplet_b_back on pub_billtemplet_b_back.pk_billtemplet_b = pub_billtemplet_b.pk_billtemplet_b
where 1=1
and (pub_billtemplet_b.LISTSHOWORDER!=pub_billtemplet_b_back.LISTSHOWORDER
or pub_billtemplet_b.REFTYPE!=pub_billtemplet_b_back.REFTYPE
)
--and pub_billtemplet_b.itemkey='glbdef11'
--恢复字段顺序
update pub_billtemplet_b
SET
pub_billtemplet_b.LISTSHOWORDER = (select pub_billtemplet_b_back.LISTSHOWORDER from pub_billtemplet_b_back where pub_billtemplet_b_back.pk_billtemplet_b = pub_billtemplet_b.pk_billtemplet_b),
pub_billtemplet_b.REFTYPE = (select pub_billtemplet_b_back.REFTYPE from pub_billtemplet_b_back where pub_billtemplet_b_back.pk_billtemplet_b = pub_billtemplet_b.pk_billtemplet_b)
WHERE EXISTS(select 1 FROM pub_billtemplet_b_back WHERE pub_billtemplet_b_back.pk_billtemplet_b = pub_billtemplet_b.pk_billtemplet_b);
--恢复字段必填
update pub_billtemplet_b
SET
pub_billtemplet_b.NULLFLAG = (select AAAAA.backNULLFLAG from AAAAA where AAAAA.pk_billtemplet_b = pub_billtemplet_b.pk_billtemplet_b)
WHERE EXISTS(select 1 FROM AAAAA WHERE AAAAA.pk_billtemplet_b = pub_billtemplet_b.pk_billtemplet_b);
----回滚数据
select * from pub_billtemplet as of timestamp to_timestamp('2021-06-20 17:16:38', 'yyyy-mm-dd hh24:mi:ss');
select * from pub_billtemplet_B as of timestamp to_timestamp('2021-06-20 17:16:38', 'yyyy-mm-dd hh24:mi:ss');
select * from hr_infoset as of timestamp to_timestamp('2021-06-20 17:16:38', 'yyyy-mm-dd hh24:mi:ss');
select * from hr_infoset_item as of timestamp to_timestamp('2021-06-20 17:16:38', 'yyyy-mm-dd hh24:mi:ss');
--查看公式、顺序等变化了的字段
select
pub_billtemplet_b.NULLFLAG,
pub_billtemplet_b_back.NULLFLAG as backNULLFLAG,
pub_billtemplet_b.pk_billtemplet,
pub_billtemplet_b.itemkey,
pub_billtemplet_b_back.NULLFLAG as backitemkey,
pub_billtemplet_b.table_code,
pub_billtemplet_b_back.table_code as backtable_code,
pub_billtemplet_b.DEFAULTSHOWNAME,
pub_billtemplet_b_back.NULLFLAG as backDEFAULTSHOWNAME
from pub_billtemplet_b
LEFT OUTER JOIN (select * from pub_billtemplet_B as of timestamp to_timestamp('2021-06-20 17:16:38', 'yyyy-mm-dd hh24:mi:ss')) pub_billtemplet_b_back on pub_billtemplet_b_back.pk_billtemplet_b = pub_billtemplet_b.pk_billtemplet_b
where 1=1
and ( --pub_billtemplet_b.LISTSHOWORDER!=pub_billtemplet_b_back.LISTSHOWORDER --显示顺序
--or pub_billtemplet_b.REFTYPE!=pub_billtemplet_b_back.REFTYPE
pub_billtemplet_b.DATATYPE!=pub_billtemplet_b_back.DATATYPE --数据类型
--pub_billtemplet_b.NULLFLAG!=pub_billtemplet_b_back.NULLFLAG --必输
--or pub_billtemplet_b.EDITFORMULA!=pub_billtemplet_b_back.EDITFORMULA --编辑公式
--or pub_billtemplet_b.LOADFORMULA!=pub_billtemplet_b_back.LOADFORMULA --显示公式
--or pub_billtemplet_b.VALIDATEFORMULA!=pub_billtemplet_b_back.VALIDATEFORMULA --验证公式
)