Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ORA-24347: Warning of a NULL column in an aggregate function  [new]
vahvarh
Member

Откуда:
Сообщений: 69
здравствуйте все!

происходит у меня вот такая фигня:
ORA-19202: Error occurred in XML processing
ORA-24347: Warning of a NULL column in an aggregate function
ORA-06512: at "SYS.DBMS_XMLGEN", line 237
ORA-06512: at "SYS.DBMS_XMLGEN", line 271
ORA-06512: at "HOST3_PHOTOPRESS.PMK_XML", line 8
ORA-06512: at "HOST3_PHOTOPRESS.CMS_CATALOGUER_MODEL", line 176

облом происходит на запросе:
			select * from (
				select
					row_number() over (order by nvl(markc.dc,sysdate-10000) desc) as rn,
					u.id as user_id,
					u.name,
					u.realname,
					u.sex,
					m.height,
					m.weight,
					m.breast,
					m.waist,
					m.hip,
					m.haircolor,
					m.eyecolor,
					to_char(nvl(markc.val,0),'99990.99') as median_mark,
					Fanyphoto(u.id) as rndphoto,
					to_char(u.date_cr,'DD.MM.YYYY') as date_cr,
					to_char(u.birthday,'DD.MM.YYYY') as birthday
				from 
								Tmodels m,
								Tusers u,
								(select user_id,sum((med1+med2+med3))/3/count(*) as val,max(date_cr) as dc from Tphotos group by user_id) markc
							
				where
					m.user_id=u.id and
					u.id=markc.user_id(+) and
					(Lsex is null or (u.sex=Lsex)) and
					(Lage is null or (abs(trunc((sysdate-u.birthday)/365)-Lage)<4)) and
					(Lbreast is null or (abs(Lbreast-m.breast)<6)) and
					(Lwantsv1 is null or (m.user_id in (select user_id from Tmodelwants where value1=Lwantsv1))) and
					(Lwantsv2 is null or (m.user_id in (select user_id from Tmodelwants where value2=Lwantsv2))) and
					(Lheight1 is null or (Lheight1<=m.height)) and
					(Lheight2 is null or (Lheight2>=m.height)) and
					(Lwaist is null or (abs(Lwaist-m.waist)<6)) and
					(Lweight1 is null or (Lweight1<=m.weight)) and
					(Lweight2 is null or (Lweight2>=m.weight)) and
					(Lwaist is null or (abs(Lhip-m.hip)<6))
				order by nvl(markc.dc,sysdate-10000) desc
			)
			where rn>(nvl(Lpage,1)-1)*40 and rn<=(nvl(Lpage,1))*40;
(всё что начинается с L - локальные переменные)
при этом просто так этот запрос спокойно исполняется и обламывается только через dbms_xmlgen.
при исполнении пустых (null) ячеек не обнаружено.


по поводу:
select user_id,sum((med1+med2+med3))/3/count(*) as val,max(date_cr) as dc from Tphotos group by user_id

select count(*) from Tphotos where med1 is null or med2 is null or med3 is null or date_cr is null; выдаёт 0
6 ноя 06, 11:10    [3358860]     Ответить | Цитировать Сообщить модератору
 Re: ORA-24347: Warning of a NULL column in an aggregate function  [new]
vahvarh
Member

Откуда:
Сообщений: 69
Тааак проехали....

Остался вопрос почему при удалении этой строки
(Lsex is null or (u.sex=Lsex)) and
всё начинает работать....
6 ноя 06, 11:20    [3358885]     Ответить | Цитировать Сообщить модератору
 Re: ORA-24347: Warning of a NULL column in an aggregate function  [new]
vahvarh
Member

Откуда:
Сообщений: 69
Разобрались

Оказалось что при удалении строки меняется execution plan. А в оригинальном запросе он достаточно хитрый, и там появляются уже внутри запроса null'ы, хотя все колонки и не null...

А в dbms_xmlgen судя по всему есть проверка на OCI_SUCCESS и всё, то есть если возвращается warning, OCI_SUCESS_WITH_INFO то он это тоже считает ошибкой.
7 ноя 06, 12:04    [3362369]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить