ORA-40478 при возврате большого json в clob в Oracle 19c - PullRequest
0 голосов
/ 11 октября 2019

В Oracle 19c я создал таблицу:

create table SAMPLE_TABLE (
id NUMBER not null,
display_name  NVARCHAR2(4000), )

Когда я запускаю скрипт:

declare    
   i integer;   
   p_tmp_clob clob;
 begin   
   select JSON_ARRAYAGG(JSON_OBJECT(t.* )) into p_tmp_clob from SAMPLE_TABLE t;
end; 

Я получаю следующее исключение ORA-40478. ORA-40478: слишком большое выходное значение (максимум: 4000)

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Вы должны указать функции вернуть CLOB , а не varchar:

Это может быть необходимо и для JSON_ARRAYAGG (или, может быть, только там - я не могу проверить этопрямо сейчас)

declare    
   i integer;   
   p_tmp_clob clob;
 begin   
   select JSON_ARRAYAGG(JSON_OBJECT(t.* RETURNING CLOB) RETURNING CLOB) 
     into p_tmp_clob 
   from SAMPLE_TABLE t;
end; 
0 голосов
/ 11 октября 2019

Строка символов, возвращаемая этой функцией, имеет тип данных VARCHAR2. Этот пункт позволяет вам указать размер типа данных VARCHAR2. Используйте BYTE, чтобы указать размер в виде количества байтов, или CHAR, чтобы указать размер в виде количества символов. По умолчанию используется BYTE. Если вы пропустите это предложение или если вы укажете это предложение, но опустите значение размера, , тогда JSON_OBJECT возвращает символьную строку типа VARCHAR2 (4000) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...