Oracle PLSQL 11g; Сохранить большой объект JSON как CLOB (слишком маленький буфер в 122 тыс. Символов) - PullRequest
0 голосов
/ 15 марта 2019

Я посмотрел в Интернете, и все, что я нашел, это люди, которые обрабатывают сгустки и встраивают форматированный JSON текст в CLOB. Я создаю объект JSON и затем сохраняю их в виде сгустка, который затем возвращается функцией, которая работает, когда объект JSON маленький, я генерирую 122 тыс. Символов. Итак, здесь Это мой объект JSON:

jsonschemeresult json := json();

Который в конце моего PLSQL имеет что-то вроде этого: (средства могут повторяться, следовательно, 122k):

{
    "report_level": {
        "report_date": "15/03/2019"
    },
    "scheme_level":
 {
        "name": "A name",
        "id": "123123123",
        "funds": [{
            "fund_name": "Fund 1",
            "fund_value": 123123.12
        }, {
            "fund_name": "Fund 2",
            "fund_value": 987987.98
        }]
    }
}

Я могу получить консольный вывод, используя его, как я знаю, его длина в 122 КБ:

jsonschemeresult.print;

И если JSON мал, я могу получить CLOB для возврата, используя это:

v_final_clob := jsonschemeresult.to_char; 
RETURN v_final_clob;

Я считаю, что это ограничение to_char.

Я смотрел онлайн и здесь, и другие используют цикл и цикл по CLOB, мне нужно попробовать и цикл по объекту JSON или что-то подобное.

Пожалуйста, просмотрите и оставьте отзыв.

1 Ответ

0 голосов
/ 18 марта 2019

Я нашел решение, создал временный объект и с помощью процедуры JSON_AC object_to_clob преобразовал объект JSON в CLOB:

--use temporary LOB to hold the JSON
dbms_lob.createtemporary(lob_loc => v_out_json_clob, cache => TRUE);

--using the temporary LOB convert the JSON to a CLOB
utluser.json_ac.object_to_clob(p_self => jsonschemeresult, buf => v_out_json_clob);

RETURN v_out_json_clob;

Один недостаток - вы теряете «красивое» JSON-форматирование в возвращаемом CLOB, но синтаксически это работает.

...