Oracle:在现有文本之前插入带有 </br> 的文本

问题描述 投票:0回答:1

我的数据库中有一个 CLOB 列,其中包含如下内容:

<?xml version="1.0"?>
<tdfmt sel-start="218">31 05 2022 Rico Strydom<br/>
Op verzoek (zie e-mail) garanties overplaatsen....<br/>
    <br/>
OVERBOEKING CREDITGELDEN:<br/>BANKCODE: 1171<br/>T.L.V.: VERP. NL99BANK999999999999<br/>T.G.V.: RC NL00BANK000000000000<br/>
BEDRAG: EUR 9999999<br/>BESCHRIJVING: Vrijgave verpanding creditgelden AA98987987987 ivm overzetten zekerheid naar BGF<br/>
    <br/>
</tdfmt>

我想通过在根 (tdfmt) 之后添加文本来更新此字段,然后添加另一个

</br>

结果是:

<?xml version="1.0"?>
<tdfmt sel-start="218">THIS TEXT SHOULD GO FIRST</br>
31 05 2022 Rico Strydom<br/>
Op verzoek (zie e-mail) garanties overplaatsen....<br/>
    <br/>
OVERBOEKING CREDITGELDEN:<br/>BANKCODE: 1171<br/>T.L.V.: VERP. NL99BANK999999999999<br/>T.G.V.: RC NL00BANK000000000000<br/>
BEDRAG: EUR 9999999<br/>BESCHRIJVING: Vrijgave verpanding creditgelden AA98987987987 ivm overzetten zekerheid naar BGF<br/>
    <br/>
</tdfmt>

我尝试用这个更新我的 clob,但我怀疑 CHR(13) 是正确的选择。

UPDATE OIT SET INFTXT = UPDATEXML(XMLTYPE(OIT.INFTXT),'//tdfmt/text()[1]','THIS TEXT SHOULD GO FIRST' || chr(10)  || EXTRACTVALUE(XMLTYPE(OIT.INFTXT), '//tdfmt/text()[1]', '')).getClobVal()

希望我的愿望是明确的...

oracle plsql clob
1个回答
0
投票

您可以将 XMLQuery 与 FLWOR 一起使用,而不是 UPDATEXML:

UPDATE OIT SET INFTXT = XMLQUERY(q'^
      copy $i := $d modify (
        for $j in $i/tdfmt/text()[1]
          return insert node ( $text, $br, '&#xa;' ) before $j
      )
      return $i
    ^'
    PASSING
      XMLTYPE(OIT.INFTXT) AS "d",
      'THIS TEXT SHOULD GO FIRST' AS "text",
      XMLTYPE('<br/>') AS "br"
    RETURNING CONTENT
  ).getClobVal();

这给你:

<?xml version="1.0"?><tdfmt sel-start="218">THIS TEXT SHOULD GO FIRST<br/>
31 05 2022 Rico Strydom<br/>
Op verzoek (zie e-mail) garanties overplaatsen....<br/><br/>
OVERBOEKING CREDITGELDEN:<br/>BANKCODE: 1171<br/>T.L.V.: VERP. NL99BANK999999999999<br/>T.G.V.: RC NL00BANK000000000000<br/>
BEDRAG: EUR 9999999<br/>BESCHRIJVING: Vrijgave verpanding creditgelden AA98987987987 ivm overzetten zekerheid naar BGF<br/><br/></tdfmt>

或者要保留(我认为;主要是!)您现有的格式,请使用 XMLSerialise 而不是 getClobVal:

UPDATE OIT SET INFTXT = XMLSERIALIZE(DOCUMENT XMLQUERY(q'^
      copy $i := $d modify (
        for $j in $i/tdfmt/text()[1]
          return insert node ( $text, $br, '&#xa;' ) before $j
      )
      return $i
    ^'
    PASSING
      XMLTYPE(OIT.INFTXT) AS "d",
      'THIS TEXT SHOULD GO FIRST' AS "text",
      XMLTYPE('<br/>') AS "br"
    RETURNING CONTENT
  ) AS CLOB INDENT SIZE=4);

这给你:

<?xml version="1.0"?>
<tdfmt sel-start="218">THIS TEXT SHOULD GO FIRST<br/>
31 05 2022 Rico Strydom<br/>
Op verzoek (zie e-mail) garanties overplaatsen....<br/>
    <br/>
OVERBOEKING CREDITGELDEN:<br/>BANKCODE: 1171<br/>T.L.V.: VERP. NL99BANK999999999999<br/>T.G.V.: RC NL00BANK000000000000<br/>
BEDRAG: EUR 9999999<br/>BESCHRIJVING: Vrijgave verpanding creditgelden AA98987987987 ivm overzetten zekerheid naar BGF<br/>
    <br/>
</tdfmt>

小提琴

我已将文本字符串和

<br/>
标记作为参数传递,假设至少文本部分确实是一个变量;如果您愿意,也可以传递换行符;虽然我不确定你是否真的想要/需要它。

© www.soinside.com 2019 - 2024. All rights reserved.