Проверить длину столбца в XMLTable

Это мой XML в столбце XMLTYPE:

<customers>
<customer>
  <name>abc</name>
  <surname>abc</surname>
  <address>abc</address>
</customer>
<customer>
   <name>abc</name>
  <surname>abc</surname>
  <address>abc</address>
</customer>
</customers>

Я хочу, чтобы, если длина поля превышает допустимую длину, 15 символов, вместо этого использовалось значение по умолчанию.

В руководстве по DB2 я нашел этот пример:

select ...from .., XMLTABLE 
('$INFO/customerinfo*' passing 
columns 
city varchar(16) path a'addr/city(if(string-lenght(.)<=16) then . else "Error!")' 
) ..

Как я могу сделать это в Oracle? Это моя текущая попытка XMLTABLE:

select ..XMLTABLE 
('customers/*' passing ..
columns 
...
"address"  varchar(15) path 'indirizzo/(if(lenght(.)<=15) then . else "Error!")' 
) data;

Но получается:

ОРА-19237. невозможно разрешить вызов функции -fn:length


person Genny    schedule 17.03.2016    source источник


Ответы (1)


У вас есть опечатки и непоследовательные имена, поэтому трудно точно сказать, что вы действительно делаете, чтобы получить эту ошибку, но это работает, если вы используете функцию string-length() из своего примера DB2, а не length() (или lenght()):

"address" varchar2(15) path 'address/(if(string-length(.)<=15) then . else "Error!")' 

С измененными данными для запуска поведения ошибки:

select *
from XMLTABLE ('customers/*'
 passing xmltype('<customers>
 <customer>
  <name>abc</name>
  <surname>abc</surname>
  <address>abc def ghi jkl mno</address>
 </customer>
 <customer>
   <name>abc</name>
  <surname>abc</surname>
  <address>abc</address>
 </customer>
</customers>')
columns 
  "address"  varchar(15) path 'address/(if(string-length(.)<=15) then . else "Error!")' 
) data;

address       
---------------
Error!         
abc            
person Alex Poole    schedule 17.03.2016