电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

如何解决数据库转换后的xml空值问题

来源:金蝶云社区作者:金蝶2024-09-164

如何解决数据库转换后的xml空值问题

Oracle转sql server或者sql server不同版本之间的转换,可能会遇到转换前的xml空值转换后变成空字符串的情况。对于星空来说,空字符串的xml程序可能会因为读取不到数据而报错,因为二者是截然不同的。例如:

image.webp

第一行为null值,第二行为空字符串

接下来在这里分享将空字符串的xml转换为null值xml的方案。直接暴力将目标数据库中的xml字段中的空字符串修改为null值,看似可以解决这个问题,但是也有可能矫枉过正——将原本应该是空字符串的字段修改为null值了。

下面以oracle转sql 为例来说明处理的过程:

1、创建表chl_havexml用来存储类型为xml类型的表名和字段(oracle数据库执行)

create table chl_havexml(table_name varchar2(100),column_name varchar2(100),
fkeycount number,fkeyfield varchar2(100),fnullvaluecount number)

2、收集类型为xml类型的表名和字段(oracle数据库执行)

insert into chl_havexml(table_name,column_name,fkeycount,fkeyfield,fnullvaluecount)
select table_name,column_name,0,'',0
from user_tab_cols  where data_type='XMLTYPE'

3、统计一下这些xml字段所属表的主键数量(oracle库执行)

update chl_havexml set fkeycount=0;
merge into chl_havexml a using 
(select t1.table_name,count(column_name)  fcount
from user_constraints t1 join user_cons_columns t2 on t1.constraint_name=t2.constraint_name
 where constraint_type ='P'
group by t1.table_name) b on (a.table_name=b.table_name )
when matched then update 
set a.fkeycount=b.fcount;

4、收集单一主键的表的主键字段名(oracle库执行)

merge into chl_havexml a using 
(select t1.table_name,column_name 
from user_constraints t1 join user_cons_columns t2 on t1.constraint_name=t2.constraint_name
 where constraint_type ='P' and t1.table_name in  (select table_name from chl_havexml  where   fkeycount=1)
) b 
on (a.table_name=b.table_name)
when matched then update 
set a.fkeyfield=b.column_name

5、动态凭借统计控制数据量sql,将查询到的sql复制出来执行(oracle库执行)

select 'update chl_havexml set fnullvaluecount=
(select count(1) from '||table_name||' where '||column_name||' is null)
where table_name='''||table_name||''' and column_name='''||column_name||''';' from  chl_have

6、查看这些待xml字段的表有多少个是存在空值数据的(oracle库执行)

select * from  chl_havexml  where fnullvaluecount<>0

7、查看存在空值数据的表不是单一主键的(oracle库执行)

select * from  chl_havexml  where fnullvaluecount<>0  and fkeycount<>1

视图的话可以不用处理,因为基表处理了视图自然也自动维护好了

像星空多语言表,有时候是两个主键,这些数据要单独处理了

8、查看存在空值数据的表是单一主键的(oracle库执行)

select * from  T_MDL_FORMMENUTPL_L where fxml is null

9、编写批量更新的SQL(oracle库执行)

select 'update    '||table_name||' set '||column_name||'=null where '||fkeyfield||' in
(select '||fkeyfield||' from openquery(ORC,''select '||fkeyfield||' from '||table_name||' where '||column_name||' is null''))
and convert(varchar(max),'||column_name||')='''';
' from chl_havexml where  fnullvaluecount

如何解决数据库转换后的xml空值问题

Oracle转sql server或者sql server不同版本之间的转换,可能会遇到转换前的xml空值转换后变成空字符串的情况。对于星空来说,空字符串的x...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信