如何在PL SQL中的现有xml数据上附加多个子xml

时间:2016-02-02 07:50:44

标签: xml plsql

我想在现有的xml数据上附加多个子xml。

这是我的pl sql函数代码:

select SALPROFILE  into rs from SALARYPROFILE where EMPID = 'ID123';    
    with xmlTab(val) as (
    select xmlType(rs.getClobval())
    from dual
    )
    select APPENDCHILDXML( val,
                           'employee',
                           XMLType('<PAYMSTR_SALHDNM>BANK LOAN-7</PAYMSTR_SALHDNM><PAYMSTR_AMOUNT>12500</PAYMSTR_AMOUNT>')                           
                         ) into APPENDX     
    from xmlTab;

XMLType内的APPENDCHILDXML不接受多个标记字符串。但是,如果只提供1个标记字符串,例如XMLType('<PAYMSTR_SALHDNM>BANK LOAN-7</PAYMSTR_SALHDNM>'),那么它就会被接受。而且,我看到了{{3函数已被弃用。所以,我怎么能以非常简单的方式解决这个问题。有没有更好更简单的替代方案。请告诉我任何进一步的信息。谢谢

1 个答案:

答案 0 :(得分:1)

上面的代码无法正常工作的原因是:

'<PAYMSTR_SALHDNM>BANK LOAN-7</PAYMSTR_SALHDNM <PAYMSTR_AMOUNT>12500</PAYMSTR_AMOUNT>'

无效,因为它没有根元素。以下例如可以工作,因为它有一个根节点(&#34; PAYMENT_INFO&#34;):

select SALPROFILE  into rs from SALARYPROFILE where EMPID = 'ID123';    
with xmlTab(val) as (
  select xmlType(rs.getClobval())
  from dual
)
select APPENDCHILDXML( val,
                       'employee',
                       XMLType('<PAYMENT_INFO><PAYMSTR_SALHDNM>BANK LOAN-7</PAYMSTR_SALHDNM><PAYMSTR_AMOUNT>12500</PAYMSTR_AMOUNT></PAYMENT_INFO>')                           
                     ) into APPENDX     
from xmlTab;

我使用新的XQUERY东西并不是很好,但是有很多关于如何使用它的信息,这看起来可能会指向正确的方向:Inserting a child node in an XMLTYPE column