Я обнаружил забавную проблему с DB2 v9.7 и оператором SQL LIKE
.Проверьте это:
-- this works and returns one record
select 1
from SYSIBM.DUAL
where 'abc' like concat('a', 'bc')
-- this doesn't work
select 1
from SYSIBM.DUAL
where 'abc' like concat(cast('a' as varchar(2001)), cast('bc' as varchar(2000)))
-- It causes this error (from JDBC):
-- No authorized routine named "LIKE" of type "FUNCTION" having compatible
-- arguments was found.. SQLCODE=-440, SQLSTATE=42884, DRIVER=4.7.85
Я поиграл с длинами, и кажется, что проблема появляется, как только длина складывается, чтобы быть больше, чем 4000
.Если я «обрежу» всю сцепленную строку обратно до длины 4000
, проблема исчезнет:
select 1
from SYSIBM.DUAL
where 'abc' like
cast(concat(cast('a' as varchar(2001)), cast('bc' as varchar(2000)))
as varchar(4000))
Интересно, что это действительно связано с функцией CONCAT
.Также работает следующее:
select 1
from SYSIBM.DUAL
where 'abc' like cast('abc' as varchar(32672))
Кто-нибудь сталкивался с такой проблемой?Это ошибка в DB2?Или какое-то недокументированное ограничение?NB: Я нашел похожую проблему здесь:
https://www -304.ibm.com / support / docview.wss? Uid = swg1PM18687
Учитывая, что другой IBMПродукт создает обходной путь для этой проблемы в 2010 году, я полагаю, что это не совсем ошибка, иначе это было бы исправлено за это время?