使用正則表示式對xml檔案中資料字典進行整理
阿新 • • 發佈:2019-02-10
在工作中,需要對xml檔案中資料字典進行整理。 SQL> create table t1(text varchar2(4000)); 表已建立。 SQL> insert into t1 values(' <enumeration id="QX" value="0" longname="許可權資訊" /> 2 <enumeration id="GYJS" value="1" longname="櫃員角色關聯資訊" /> 3 <enumeration id="JSQX" value="2" longname="角色許可權關聯資訊" />'); 1 row inserted SQL> commit; Commit complete SQL> select * from t1; TEXT ---------------------------------------------------------------------------------------------------- <enumeration id="QX" value="0" longname="許可權資訊" /> <enumeration id="GYJS" value="1" longname="櫃員角色關聯資訊" /> <enumeration id="JSQX" value="2" longname="角色許可權關聯資訊" /> 這裡是一行資料,現在需要顯示出如下格式: TEXT ---------------------------------------------------------------------------------------------------- 0-許可權資訊1-櫃員角色關聯資訊2-角色許可權關聯資訊 即將裡面的value和longname提取出來,使用“-”連線。 SQL語句為: 首先將v開頭的部分截取出來,將包含value|longname|=|"|/>替換,使用trim函式處理前後空格,最後使用listagg函式進行列轉行, 注:order by 1也可以,同時regexp_replace函式將不是數字的部分替換為空。 SQL> select listagg(string3) within group(order by regexp_replace(string3, '[^0-9]', '')) 2 from (select replace(string2, ' ', '-') string3 3 from (select trim(regexp_replace(string1, 4 '(value|longname|=|"|/>)', 5 '')) string2 6 from (select text, 7 regexp_substr(text, 'v.*', 1, level) string1 8 from t1 9 connect by level <= regexp_count(text, 'value')))) 10 ; LISTAGG(STRING3)WITHINGROUP(OR -------------------------------------------------------------------------------- 0-許可權資訊1-櫃員角色關聯資訊2-角色許可權關聯資訊