Oracle 12.1+ 使用 Null 更新 CLOB 字符串数据

Oracle 12.1+ Update CLOB String Data With Null

我正在使用 Oracle 12.1+ 数据库,一段时间后,我的 table column COKE_INFOCLOB 类型的一些数据被损坏。

我已更正 java 代码以防止这种情况发生,但对于所有历史数据,我想将所有损坏的数据归档到 null

参见Table说明

desc t_coke_ogn
Name                   Null     Type         
---------------------- -------- ------------ 
BOTTLE_CODE              NOT NULL VARCHAR2(30) 
COKE_INFO                            CLOB         
LAST_VERSION_CODE               VARCHAR2(30) 

查看 COKE_INFO 数据。

 [
  {
    "type": {
      "label": "MIRINDA",
      "code": 15
    },
    "repeatedColumn": {
      "repeatedColumn": {
        "repeatedColumn": "Coke_1633795"
      }
    }
  }
]
上面的

repeated_column 有时重复 10 次,有时重复 2 次。我想将其设置为 null,如下所示

[
  {
    "type": {
      "label": "MIRINDA",
      "code": 15
    },
    "repeatedColumn": null
  }
]

不确定如何进行这里

您可以将 json_table() 函数与字符串函数 regexp_replace()replace() 一起使用:

SELECT replace(regexp_replace(coke_info, '[[:space:]]*'),rcol,'null') as coke_info
  FROM t_coke_ogn
 CROSS JOIN json_table(coke_info, '$.repeatedColumn[*]'
              COLUMNS (rcol VARCHAR2(4000) FORMAT JSON PATH '$'))

为了直接更新:

MERGE INTO t_coke_ogn t1
USING 
(
SELECT bottle_code , replace(regexp_replace(coke_info, '[[:space:]]*',''),rcol,'null') 
    as coke_info
  FROM t_coke_ogn
 CROSS JOIN json_table(coke_info, '$.repeatedColumn[*]'
              COLUMNS (rcol VARCHAR2(4000) FORMAT JSON PATH '$'))) t2
   ON (t2.bottle_code = t1.bottle_code)         
  WHEN MATCHED THEN 
UPDATE 
   SET t1.coke_info = t2.coke_info 

Demo