powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01706: user function result value was too large
7 сообщений из 7, страница 1 из 1
ORA-01706: user function result value was too large
    #37494844
Sole74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые любители Oracle.


select
co.*
from contracts con,
xmltable(xmlnamespaces(DEFAULT 'http://zakupki.gov.ru/oos/export/1', 'http://zakupki.gov.ru/oos/types/1' as "oos"),
'export/notificationOK' PASSING con.OBJECT_VALUE
columns
id NUMBER PATH 'oos:id',
noguCONamount NUMBER PATH'oos:notificationPlacement/oos:guaranteeContract/oos:amount ',
noguCONbik VARCHAR2(128) PATH'oos:notificationPlacement/oos:guaranteeContract/oos:bik ',
... итд

Выполняя данный запрос срубается
ORA-01706: user function result value was too large


уменьшив количество полей работает без проблем.

Какую настройку d Oracle изменить чтоб результат функции можно было вернуть?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-01706: user function result value was too large
    #38534042
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up-ну

при наличии в возврате поля с содержимым вида
<Pinf>/57В=1/58В=20040408/59В=20230409/62=452713240692</Pinf>
и парсе его в колумнсы xmltable :
Код: plsql
1.
2.
3.
4.
....
			,Pinf	varchar2(4000)	path '/vod/Pinf/text()'
			--,Pinf		clob			path '/vod/Pinf'
....


по обоим (и прочим аналогичным) вариантам,
имею ошибку вида:
Код: plsql
1.
2.
ORA-01706: user function result value was too large
01706. 00000 -  "user function result value was too large"


в возвратах, где это поле пусто <Pinf /> - ошибка не возникает

комментирую этот колумн в спсике xmltable -- ошибка не возникает.

чего я в упор не вижу ?
...
Рейтинг: 0 / 0
ORA-01706: user function result value was too large
    #38534115
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка, нашёл , что в проблемном случае в этом теге 16000++ буковок
(слона то я и не приметил)
т.е. в varchar(4000) оно не влезает точно.

но вариант с clob тоже не прокатывает, с той же ошибкой
видимо xmltable это (columns .... clob ...) не умеет ?
в http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions228.htm не нашел перечень поддерживаемых datatypes для column

есть ли способы выдрать clob из тега через xmltable?
...
Рейтинг: 0 / 0
ORA-01706: user function result value was too large
    #38534119
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

попробуйте
Код: plsql
1.
substr(xmlserialize(content Pinf as clob), 1, 4000) as Pinf  
...
Рейтинг: 0 / 0
ORA-01706: user function result value was too large
    #38534262
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790qwwq,

попробуйте
Код: plsql
1.
substr(xmlserialize(content Pinf as clob), 1, 4000) as Pinf  


не понял. что и где пробовать.
у меня есть
clob_xml -- ответ веб-сервиса.
есть
xml_doc
Код: plsql
1.
2.
3.
WITH t_xml AS (SELECT myWebServiceRieder(.......) AS  clob_xml FROM DUAL)
select xmltype(clob_xml) AS xmldoc
	from t_xml


-- до сих пор всё безошибочно (клобы в тегах вполне себе присутствуют в выдаче, ничего не портят)

и я от него беру xmltable ~~
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT x.*
FROM  t_xml,
 xmltable(
		xmlnamespaces('http://www.w3.org/2003/05/soap-envelope'	AS "soap"
				,.... AS ....
		)
		,......
		PASSING xmldoc
		columns
			.........
			,Pinf clob 	path '...........'
			
			.......100500 полей
		) x;


-- это обычно несколько строк с кучей полей.
тут, в случае непустого длинного содержимого Pinf-поля, имею описанную ошибку

(вообще-то там многотабличный набор, я выбираю только одну табличку, но все её записи)
хотелось бы малой кровью поиметь в этой таблице clob-содержащее поле.

если есть другой способ -- то не подскажете, какой ? Танцуя именно от xmldoc.
...
Рейтинг: 0 / 0
ORA-01706: user function result value was too large
    #38534295
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел трюк,
https://community.oracle.com/thread/2475946
а именно

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT
	x.id
	,x.f1
......
	,dbms_xmlgen.convert(x.Pinf.getClobVal(), 1) as Pinf
......
FROM 
...........
	columns
		..........
		,Pinf		xmltype 		path '/vod/Pinf/text()'
		..........


кажется работает. (ошибка не вылетает)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ORA-01706: user function result value was too large
    #39316487
IgorD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также столкнулся с этой задачкой. Мое решение:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
  ...
     value(tab).extract('person/bio/text()').GETCLOBVAL() bio, 
  ...

from cust  s,
       table(XMLsequence(extract(xmltype(s.content), 'personlist/*'))) tab

 where s.id = :l_source_id
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01706: user function result value was too large
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]