如何在 plsql 的 varchar2 字段中的 xml 节点末尾插入“1”?
Posted
技术标签:
【中文标题】如何在 plsql 的 varchar2 字段中的 xml 节点末尾插入“1”?【英文标题】:How to insert a '1' at the end of an xml node in a varchar2 field in plsql? 【发布时间】:2018-02-23 14:10:47 【问题描述】:我试图在包含 xml 数据的 varchar2 字段中的 referenceid
节点末尾插入一个“1”。我很难理解这是否可能。这是字段数据的示例。
<?xml version="1.0"?><RECEIVE_PO_005><CNTROLAREA><BSR><VERB>RECEIVE</VERB>
<NOUN>PO</NOUN><REVISION>005</REVISION></BSR><SENDER><LOGICALID>2</LOGICALID>
<COMPONENT>-</COMPONENT><TASK>RECEIVEPO</TASK>
<REFERENCEID>20241920x32255420001-0047x4210743</REFERENCEID>....................
【问题讨论】:
【参考方案1】:an Oracle built-in function, UPDATEXML()
允许您执行此操作。因为您想附加到现有属性而不是覆盖它,所以需要额外使用extract()
来获取文本值:
update x23
set xmlt =
UPDATEXML(xmlt, '/RECEIVE_PO_005/CNTROLAREA/SENDER/REFERENCEID/text()',
extract(xmlt, '/RECEIVE_PO_005/CNTROLAREA/SENDER/REFERENCEID/text()')||'-1')
where id = 1;
连接-1
只是为了更容易发现:)
路径可能不适合您:我不得不猜测您的整个文档是什么样的for the LiveSQL demo (free OTN account required)。
我注意到您的问题是您将 XML 存储在 varchar2
列中,而不是作为 xmltype
。使用 Oracle XMLType 列来存储 XML 是一个非常好的主意,因为它提供了各种简洁的功能。像UPDATEXML()
,它不适用于纯字符串。要使其与 varchar2
列一起使用,您需要将该列强制转换为 xmltype
,如下所示:
update x23
set xmlt =
UPDATEXML(xmlType(xmlt), '/RECEIVE_PO_005/CNTROLAREA/SENDER/REFERENCEID/text()',
extract(xmlType(xmlt), '/RECEIVE_PO_005/CNTROLAREA/SENDER/REFERENCEID/text()') || '-1')
where id = 1;
【讨论】:
@jck7282008 - 如果您发现此答案有帮助,请考虑支持和/或接受它。接受的答案改进了 *** 作为未来寻求者的资源。以上是关于如何在 plsql 的 varchar2 字段中的 xml 节点末尾插入“1”?的主要内容,如果未能解决你的问题,请参考以下文章
一个带有 CLOB 或 VARCHAR2 输入和 CLOB 或 VARCHAR2 返回值的单个 PLSQL 函数
如何将oracle表中的字段由integer 转变为varchar2(50)