作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
1) 我必须从 oracle select 查询中生成 json,它有三种我可以遵循的方法。
SELECT JSON_ARRAY(json_object('id' VALUE employee_id,
'data_clob' VALUE data_clob
)) from tablename;
declare
ret json;
begin
ret := json_dyn.executeObject('select * from tab');
ret.print;
end;
/
FOR rec IN (SELECT employee_id, data_clob
FROM tablename) LOOP
IF i <> 1 THEN
v_result := v_result || ',';
END IF;
v_result := v_result || '{"employee_id":' || to_char(rec.employee_id) || ',"data_clob": ' || rec.data_clob || '}';
i := i + 1;
END LOOP;
v_result := v_result || ']}';
ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 57416, maximum: 4000)
最佳答案
回答这个问题:
3 approach solve my problem but i don't want to run for loop . Is there is any solution in oracle to handle this .
LISTAGG
连接字符串而无需循环。功能:
SELECT '{"employees":[' || LISTAGG('{"employee_id":' || to_char(employee_id)
|| ',"data_clob":"' || data_clob || '"}', ',')
WITHIN GROUP (ORDER BY employee_id) || ']}' AS json
FROM tablename;
LISTAGG
限制为 4000 个字符。以下内容更复杂/繁琐,但应超出此限制:
SELECT '{"employees":[' || dbms_xmlgen.convert(
RTRIM(XMLAGG(XMLELEMENT(E,'{"employee_id":' || to_char(employee_id)
|| ',"data_clob":"' || data_clob || '"}',',')
.EXTRACT('//text()') ORDER BY employee_id).GetClobVal(),',')
, 1) || ']}' AS json
FROM tablename;
XMLAGG
Handlebars
CLOB
s 但
EXTRACT
函数具有转义某些字符的副作用(例如从
"
到
"
)。上面的查询使用
"
将这些转换回(例如从
"
到
dbms_xmlgen.convert
)功能 - 见
this answer了解更多详情。
关于sql - 如何在 Oracle 中为大于 32k(例如 60,000 个字符)的 CLOB 生成 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47092831/
我是一名优秀的程序员,十分优秀!