文章主题
Agile PLM在升级过程中,常常可能会出现MultiList出现重复值的情况,本人介绍最直观的分析方法和批量去重复值的函数加以快速解决。比如如下截图,TESTPART001的PageTwo页上的CM Access栏位出现多个重复值,且不止一个值。
分析解决
由于这个栏位定义在PageTwo上,因此需要在数据库中先查找对应的表和字段。查看JavaClient中的设置,可以得知。如下图。
再需要查找对应的TESTPART001的ID,最快捷的方式是鼠标放在任意一个tab上,查看浏览器下访的Javascript提示。
查表确认。
接着可以查找Page_Two表中的Multilist02字段,可以明确看到多个重复值。对于少量行数的重复值,可以手动SQL修改。但往往情况比较复杂,出现了大批量item的重复值。
提供一个函数来批量删除。
create or replace function remove_dup_vals (p_string in varchar2) return varchar
is
l_output_string varchar2(4000) :='';
begin
FOR X IN (
with data_rows as
(
select
trim( substr (txt,
instr (txt, ',', 1, level ) + 1,
instr (txt, ',', 1, level+1)
- instr (txt, ',', 1, level) -1 ) )
as token
from (select ','||p_string||',' txt
from dual)
connect by level <=
length(p_string)-length(replace(p_string,',',''))+1
)
SELECT distinct * FROM data_rows)
LOOP
l_output_string :=l_output_string||','||x.token;
END LOOP;
return ',' || substr(l_output_string,3) || ',';
END;
示例
update page_two set multilist02 = remove_dup_vals(multilist02) where id=967250145;
commit;