考虑以下三个陈述。
1:
XMLSERIALIZE(DOCUMENT XMLQUERY(q'^
copy $i := $doc modify (
for $j in $i/tdfmt/text()[1]
return
insert node ( $text, $br, '
' ) before $j
)
return $i
^'
PASSING
XMLTYPE(OIT.INFTXT) AS "doc",
LENGTH(EXTRACTVALUE(XMLTYPE(OIT.INFTXT),'tdfmt/text()[1]')) AS "len",
'NEW TEXT TO INSERT' AS "text",
XMLTYPE('<br/>') AS "br"
RETURNING CONTENT) AS CLOB INDENT SIZE=4 )
AS NEW_INFTXT_A
2:
XMLSERIALIZE(DOCUMENT XMLQUERY(q'^
copy $i := $doc modify (
for $j in $i/*
return
insert node ( $text, $br, '
' ) into $j
)
return $i
^'
PASSING
XMLTYPE(OIT.INFTXT) AS "doc",
LENGTH(EXTRACTVALUE(XMLTYPE(OIT.INFTXT),'tdfmt/text()[1]')) AS "len",
'NEW TEXT TO INSERT' AS "text",
XMLTYPE('<br/>') AS "br"
RETURNING CONTENT) AS CLOB INDENT SIZE=4 )
AS NEW_INFTXT_B
3:
XMLSERIALIZE(DOCUMENT XMLQUERY(q'^
if ($len>0)
then
copy $i := $doc modify (
for $j in $i/tdfmt/text()[1]
return
insert node ( $text, $br, '
' ) before $j
)
return $i
else
copy $i := $doc modify (
for $j in $i/*
return
insert node ( $text, $br, '
' ) into $j
)
return $i
^'
PASSING
XMLTYPE(OIT.INFTXT) AS "doc",
LENGTH(EXTRACTVALUE(XMLTYPE(OIT.INFTXT),'tdfmt/text()[1]')) AS "len",
'NEW TEXT TO INSERT' AS "text",
XMLTYPE('<br/>') AS "br"
RETURNING CONTENT) AS CLOB INDENT SIZE=4 )
AS NEW_INFTXT1
这个想法是根据节点的长度在 1 和 2 之间切换。 在 3 的输出中,我注意到 xml 声明
<?xml version="1.0"?>
被省略,而 1 和 2 则存在。知道为什么添加 if then else
声明会导致这种行为,以及我应该采取什么措施来防止声明表被删除。
不确定为什么会产生这种效果,但您可以通过将
if
放在 modify
内来避免这种情况:
SELECT XMLSERIALIZE(DOCUMENT XMLQUERY(q'^
copy $i := $doc modify (
if ($len>0)
then
for $j in $i/tdfmt/text()[1]
return
insert node ( $text, $br, '
' ) before $j
else
for $j in $i/*
return
insert node ( $text, $br, '
' ) into $j
)
return $i
^'
PASSING
XMLTYPE(OIT.INFTXT) AS "doc",
LENGTH(EXTRACTVALUE(XMLTYPE(OIT.INFTXT),'tdfmt/text()[1]')) AS "len",
'NEW TEXT TO INSERT' AS "text",
XMLTYPE('<br/>') AS "br"
RETURNING CONTENT) AS CLOB INDENT SIZE=4 )
AS NEW_INFTXT1
FROM OIT
NEW_INFTXT1 |
---|
31 05 2022 Rico Strydom Op verzoek(zie电子邮件)保证overplaatsen.... 超额预订信用证: 银行代码:1171 T.L .V.:VERP。 NL99BANK999999999999 T.G.V.:RC NL00BANK000000000000 BEDRAG:欧元9999999 BESCHRIJVING:Vrijgave verpandingcreditgelden AA98987987987 ivm overzetten zekerheid naar BGF |