【发布时间】:2021-06-29 13:23:24
【问题描述】:
我正在尝试选择 XML(CLOB) 列中的标记数。
我试过了
select regexp_count(diagram, 'userTask id=', 1, 'c') as "User Tasks",
regexp_count(diagram, 'task id=', 1, 'c') as "Task"
from process_table
它有效,但我需要比使用 regexp_count 更快地获得输出。
我试过了:
select count(xt.task),
count(xt.userTask)
from process_table process
cross join xmltable(
xmlnamespaces(default 'http://www.omg.org/spec/BPMN/20100524/MODEL'),
'//definitions/process' passing xmltype(process.diagram)
columns
task varchar2(20) path 'task',
userTask varchar2(60) path 'userTask'
) xt
但是,我收到一个错误ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton sequence - got multi-item sequence
【问题讨论】:
-
对 CLOB 使用正则表达式是否比通过 XMLTable 提取节点然后计算节点更快?你确定你不能从恰好包含表达式的文本节点的内容中得到错误的匹配吗?
-
是的,错误匹配是使用 XMLTable 的另一个原因
-
好的,你有没有尝试过这种方法,它甚至更慢;还是您无法使其正常工作?如果您需要这方面的帮助,请编辑您的问题以包含示例 XML 和预期输出、您当前的最佳尝试以及您遇到的问题/错误。
-
我编辑了问题
-
请注意,XML 中的属性可能以任何顺序出现。
<whateverElementuserTask id=也会匹配,<userTask anotherAtribute="123" id=不会
标签: sql oracle sql-optimization