我正在尝试将JSON值更新为oracle表中的列(CLOB数据类型)。JSON值超过4000个字符,基于从应用程序接收的数据,字符数是动态的。JSON_MERGEPATCH习惯于将值合并到表中已经存在的现有JSON内容。
我使用java作为编程工具,并执行批处理更新(ojdbc8 jar),将更新写入oracle。我注意到,在使用JSON_MERGEPATCH时,当字符数超过40000时,CLOB将被更新为NULL,而我丢失了表中已有的数据。是否存在解决此问题并将新字段合并到现有JSON的问题?
发布于 2021-10-28 10:57:48
JSON_MERGEPATCH的语法在文档中

如果不包括"returning子句“,那么JSON_MERGEPATCH将默认返回一个VARCHAR2值,如果这超过4000个字节,那么将应用默认的"on子句”,即NULL ON ERROR。
如果您想返回一个CLOB值,那么您需要指定“返回子句”:
UPDATE table_name
SET value = JSON_MERGEPATCH(value, :newvalue RETURNING CLOB)
WHERE id = 1;db<>fiddle https://dbfiddle.uk/?rdbms=oracle_18&fiddle=ba13f331b822efedcecac6b1bf9a3c9f
https://stackoverflow.com/questions/69749922
复制相似问题