【问题标题】:how to update the xml field value at runtime?如何在运行时更新 xml 字段值?
【发布时间】:2018-04-07 22:26:02
【问题描述】:

我有以下 xml。我想在 Oracle PLSQL 运行时将 XML 中的重量更新为 2KG。该怎么做?

    <XML><FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
<FRUITS>
<FRUIT>
<FRUIT_NAME>ORANGE</FRUIT_NAME>
<ORANGE_FIELDS>
<FIELD>
<KEY>COLOUR</KEY>
<VALUE>LIGHT_RED</VALUE>
</FIELD>
<FIELD>
<KEY>WEIGHT</KEY>
<VALUE>1KG</VALUE>
</FIELD>
</DETAIL>
</ORANGE_FIELDS>
</FRUIT>
</FRUITS>

预期

<XML><FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
<FRUITS>
<FRUIT>
<FRUIT_NAME>ORANGE</FRUIT_NAME>
<ORANGE_FIELDS>
<FIELD>
<KEY>COLOUR</KEY>
<VALUE>LIGHT_RED</VALUE>
</FIELD>
<FIELD>
<KEY>WEIGHT</KEY>
<VALUE>2KG</VALUE>
</FIELD>
</DETAIL>
</ORANGE_FIELDS>
</FRUIT>
</FRUITS>

Oracle plsql 块应该这样做吗?

【问题讨论】:

  • 您好,哥们,您到现在为止都尝试过什么?
  • 为什么要使用 PL/SQL 而不是 SQL? XML 来自哪里以及它要去哪里 - 例如,您是否正在更新存储在表中的值?不管怎样,start with the documentaion,或者这个网站和其他网站上的许多例子;那么如果你卡住了,请说明你已经走了多远,出了什么问题。

标签: sql xml oracle plsql


【解决方案1】:

只需使用 SQL:

SQL Fiddle

Oracle 11g R2 架构设置

CREATE TABLE table_name ( xml_column ) AS
SELECT XMLTYPE( '<XML>
<FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
<FRUITS>
  <FRUIT>
    <FRUIT_NAME>ORANGE</FRUIT_NAME>
    <ORANGE_FIELDS>
      <FIELD><KEY>COLOUR</KEY><VALUE>LIGHT_RED</VALUE></FIELD>
      <FIELD><KEY>WEIGHT</KEY><VALUE>1KG</VALUE></FIELD>
    </ORANGE_FIELDS>
  </FRUIT>
</FRUITS>
</XML>' )
FROM DUAL;

UPDATE table_name
SET xml_column = UPDATEXML(
  xml_column,
  '/XML/FRUITS/FRUIT/ORANGE_FIELDS/FIELD/KEY[text()="WEIGHT"]/../VALUE/text()',
  '2KG'
);

查询 1

SELECT t.xml_column.getClobVal()
FROM   table_name t

Results

|                T.XML_COLUMN.GETCLOBVAL() |
|------------------------------------------|
| <XML>
  <FRUIT_SHOP>AZHAGIRI</FRUIT_SHOP>
  <FRUITS>
    <FRUIT>
      <FRUIT_NAME>ORANGE</FRUIT_NAME>
        <ORANGE_FIELDS>
        <FIELD>
          <KEY>COLOUR</KEY>
          <VALUE>LIGHT_RED</VALUE>
        </FIELD>
        <FIELD>
          <KEY>WEIGHT</KEY>
          <VALUE>2KG</VALUE>
        </FIELD>
      </ORANGE_FIELDS>
    </FRUIT>
  </FRUITS>
  </XML>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多