[sql] Как создать JSON в Oracle для CLOB, который составляет> 32k (например, 60 000 символов)?



Answers

Question

1) Я должен сделать json из запроса выбора оракула, который может следовать за тремя подходами.

SELECT JSON_ARRAY(json_object('id'         VALUE employee_id, 
                   'data_clob'    VALUE data_clob
                     )) from tablename;

также я попытался с таким подходом

2) Если вы не можете исправлять / работать с этой версией, есть отличный пакет, написанный Льюисом Каннингемом и Джонасом Крогсбуэлем: PL / JSON * http://pljson.sourceforge.net/

Это отличный пакет (я использовал его во многих установках базы данных).

Приведенные примеры хороши и охватывают большинство сценариев.

declare 
  ret json;
begin
  ret := json_dyn.executeObject('select * from tab');
  ret.print;
end;
/

Упоминание В этом ответе тоже, но не работает для такого большого клоба. Возвращать результаты запроса sql как JSON в oracle 12c

3) Другой подход может заключаться в том, что мы можем конкатенировать строку после запроса select.

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 || ']}'; 

3 решить мою проблему, но я не хочу запускать цикл . Есть ли какое-либо решение в oracle, чтобы справиться с этим.

Я проверяю решение, но это не работает без цикла.

https://technology.amis.nl/2015/03/13/using-an-aggregation-function-to-query-a-json-string-straight-from-sql/

url предлагает некоторое решение, я пробовал это, но не работал.

ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 57416, maximum: 4000)

Не могли бы вы рассказать мне, как это можно сделать?




Related