簡體   English   中英

Oracle 更新 Clob 數據類型列中的數據

[英]Oracle Update data in Clob datatype column

我對 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 列中的文本。

您可以使用JSON_MERGEPATCH對 JSON 執行更新。 要使用JSON_MERGEPATCH ,在第二個參數中,您需要傳遞要更新的鍵/值對的 JSON object 。 請參見下面的示例。

還有一點需要注意的是,JSON_MERGEPATCH 的返回值會從JSON_MERGEPATCH中刪除任何不必要的空格。

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> commit;

Commit complete.

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM