【问题标题】:Oracle Update data in Clob datatype columnClob 数据类型列中的 Oracle 更新数据
【发布时间】:2022-10-22 18:16:34
【问题描述】:

我对 Oracle 和 Clob 数据类型非常陌生。

我们有一个名为 ABC 的表,其中有一列 CLOB 数据类型。

Clob 列“MyClob”具有以下文本数据:

{ "UD_1":"John", "UD_2":"Doe", "UD_3":"1011=John Doe"}

当我使用以下查询查询表“ABC”时,

Select Id, 
   JSON_VALUE(MyClob, '$.UD_1') FirstName
   JSON_VALUE(MyClob, '$.UD_2') LastName
   JSON_VALUE(MyClob, '$.UD_3') Status
From Abc

我得到下表:

Id    FirstName  LastName    Status
1     John       Doe         1011=John Doe
2     Jack       Ham         2022=Jack Ham

我只想更新其中一行的“UD_3”值。我不确定如何编写更新查询来更新 Clob 列中的文本。

【问题讨论】:

    标签: sql oracle clob


    【解决方案1】:

    您可以使用JSON_MERGEPATCH 对 JSON 执行更新。要使用JSON_MERGEPATCH,您需要在第二个参数中传递要更新的键/值对的 JSON 对象。请参见下面的示例。

    另一个需要注意的是,JSON_MERGEPATCH 的返回值会从 JSON 中删除任何不必要的空格。

    SQL> CREATE TABLE sampletable
      2  (
      3      id,
      4      myclob
      5  )
      6  AS
      7      SELECT 1,
      8                EMPTY_CLOB ()
      9             || '{ "UD_1":"John", "UD_2":"Doe", "UD_3":"1011=John Doe"}'
     10        FROM DUAL
     11      UNION ALL
     12      SELECT 2,
     13                EMPTY_CLOB ()
     14             || '{ "UD_1":"Jack", "UD_2":"Ham", "UD_3":"2022=Jack Ham"}'
     15*       FROM DUAL;
    
    Table SAMPLETABLE created.
    
    SQL> SELECT *
      2    FROM sampletable  t
      3         CROSS JOIN
      4         JSON_TABLE (
      5             t.myclob,
      6             '$'
      7             COLUMNS (firstname VARCHAR2 PATH '$.UD_1',
      8                      lastname VARCHAR2 PATH '$.UD_2',
      9*                     status VARCHAR2 PATH '$.UD_3'));
    
       ID MYCLOB                                                    FIRSTNAME    LASTNAME    STATUS
    _____ _________________________________________________________ ____________ ___________ ________________
        1 { "UD_1":"John", "UD_2":"Doe", "UD_3":"1011=John Doe"}    John         Doe         1011=John Doe
        2 { "UD_1":"Jack", "UD_2":"Ham", "UD_3":"2022=Jack Ham"}    Jack         Ham         2022=Jack Ham
    
    SQL> UPDATE sampletable
      2     SET myclob = json_mergepatch (myclob, '{"UD_3":"3033-Devp"}')
      3*  WHERE id = 1;
    
    1 row updated.
    
    SQL> SELECT *
      2    FROM sampletable  t
      3         CROSS JOIN
      4         JSON_TABLE (
      5             t.myclob,
      6             '$'
      7             COLUMNS (firstname VARCHAR2 PATH '$.UD_1',
      8                      lastname VARCHAR2 PATH '$.UD_2',
      9*                     status VARCHAR2 PATH '$.UD_3'));
    
       ID MYCLOB                                                    FIRSTNAME    LASTNAME    STATUS
    _____ _________________________________________________________ ____________ ___________ ________________
        1 {"UD_1":"John","UD_2":"Doe","UD_3":"3033-Devp"}           John         Doe         3033-Devp
        2 { "UD_1":"Jack", "UD_2":"Ham", "UD_3":"2022=Jack Ham"}    Jack         Ham         2022=Jack Ham
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 2011-02-07
      • 1970-01-01
      相关资源
      最近更新 更多