Oracle 12.1+ 使用 Null 更新 CLOB 字符串数据
Oracle 12.1+ Update CLOB String Data With Null
我正在使用 Oracle 12.1+
数据库,一段时间后,我的 table column
COKE_INFO
中 CLOB
类型的一些数据被损坏。
我已更正 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
我正在使用 Oracle 12.1+
数据库,一段时间后,我的 table column
COKE_INFO
中 CLOB
类型的一些数据被损坏。
我已更正 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