我有一个表,其中有一些代码在DB2 7中保存为clobs。
这是表格内容:
| CODEID | CODEXML |CODECREATIONTS |
|--------|--------------|--------------------------------|
| 1 | <CLOB> | January, 14 2015 22:33:49+0000 |
| 2 | <CLOB> | January, 15 2015 22:33:49+0000 |
每个clob都有这样的XML:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT_MODULE Ver="1" VerComment="This is a script created for testing">
<LANGUAGE>CustomLanguage</LANGUAGE>
<SCRIPT>
<LINE>function print()</LINE>
<LINE>{</LINE>
<LINE>\t return \"I am being called";</LINE>
<LINE>}</LINE>
<SCRIPT>
<ATTRIBUTES></ATTRIBUTES>
</ROOT_MODULE>
当我发出此查询时:
select
xmlCodeTable.lineCode
from
myCodes,
XMLTABLE(
'$xmlDoc/ROOT_MODULE/SCRIPT' PASSING XMLPARSE(DOCUMENT myCodes.codeXML) AS "xmlDoc"
COLUMNS
lineCode varchar(50) PATH 'LINE[1]'
) AS xmlCodeTable
where codeID = 1
我明白了:
| lineCode |
|-----------------|
| function print()|
我需要的是获得这个:
| lineCode |
|------------------------------------------|
| function print() |
| { |
| \t return "I am being called"; |
| } |
当我摆脱&#34; [1]&#34;在查询路径中,它显示了一个错误。
我如何做我需要的?
感谢。
注意:这已经实现了,所以我无法改变设计,只是做一个合适的版本控制系统。
答案 0 :(得分:0)
您的案例中的XPath表达式LINE
会返回一系列LINE
元素,这显然与VARCHAR
不兼容。解决此问题的一种方法是重写您的查询:
select
xmlCodeTable.lineCode
from
myCodes,
XMLTABLE(
'$xmlDoc/ROOT_MODULE/SCRIPT/LINE'
PASSING XMLPARSE(DOCUMENT myCodes.codeXML) AS "xmlDoc"
COLUMNS
lineCode varchar(50) PATH '.'
) AS xmlCodeTable
where codeID = 1
如果您还需要来自LINE
父元素的内容,请使用相对XPath:
...
COLUMNS
lineCode varchar(50) PATH '.',
lang varchar(50) PATH '../../LANGUAGE
...