我有一个BPMN2.0 XML值存储在一个表的CLOB中。
其具有与此类似结构
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_17dxovu" targetNamespace="http://bpmn.io/schema/bpmn" exporter="bpmn-js (https://demo.bpmn.io)" exporterVersion="4.0.3">
<bpmn:collaboration id="Collaboration_1wfeho3">
<bpmn:participant id="Participant_0fn1t3b" name="Participant" processRef="Process_16me3ie" />
</bpmn:collaboration>
<bpmn:process id="Process_16me3ie">
<bpmn:dataStoreReference id="DataStoreReference_16vk15q" name="Entity Data Repository" />
<bpmn:startEvent id="Event_0ncce8e">
<bpmn:outgoing>Flow_16gz7yv</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:task id="Activity_12og88i" name="oldval">
</bpmn:task>
等等
我只想用一个新的名称更新任务的name属性。
所以我尝试了不同的口味
UPDATE process p
SET p.bpmn_xml = updatexml( p.bpmn_xml, '//bpmn:task[@id="Activity_12og88i" ]/name[text()="oldval"]/text()', 'newval' );
但我犯了很多错误
PL/SQL: ORA-00932: inconsistent datatypes: expected - got - at line xxx
指针赞赏。
2条答案
按热度按时间vuktfyat1#
你有四个问题:
1.根据this answer,您需要在
UPDATEXML
的第4个参数中包含名称空间;UPDATEXML
将XMLTYPE
作为第一个参数,因此您需要将CLOB
转换为XMLTYPE
;1.您希望使用XPathx 1 m4n1x;和
就像这样:
其中,对于示例数据:
将XML更新为:
| XML文档|
| --------------|
| <bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_17dxovu" targetNamespace="http://bpmn.io/schema/bpmn" exporter="bpmn-js (https://demo.bpmn.io)" exporterVersion="4.0.3"><bpmn:collaboration id="Collaboration_1wfeho3"><bpmn:participant id="Participant_0fn1t3b" name="Participant" processRef="Process_16me3ie"/></bpmn:collaboration><bpmn:process id="Process_16me3ie"><bpmn:dataStoreReference id="DataStoreReference_16vk15q" name="Entity Data Repository"/><bpmn:startEvent id="Event_0ncce8e">bpmn:outgoing流量_16gz7yv</bpmn:outgoing></bpmn:startEvent><bpmn:task id="Activity_12og88i" name="newval"> </bpmn:task></bpmn:process></bpmn:definitions> |
fiddle
4ioopgfo2#
您收到的错误消息表明输入和输出值的数据类型不一致,这可能是由于对
updatexml()
函数使用了不正确的参数或语法造成的。要更新BPMN2.0 XML值中任务元素的
name
属性,可以使用以下SQL语句:此SQL语句使用
updatexml()
函数将id
属性等于"Activity_12og88i"
的bpmn:taskName
元素更新为新值'newval'
。where
子句确保在更新name
属性之前,任务元素存在于BPMN2.0 XML值中。