DB2 v9.7とSQL LIKE
演算子で面白い問題が見つかりました。これをチェックアウト:DB2 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:他のIBM製品は、2010年にこの問題の回避策を作成することを考えると
https://www-304.ibm.com/support/docview.wss?uid=swg1PM18687
を、私はそれが本当にバグではありませんだと思う、それ以外の場合は平均時間で修正されているだろう:私はここに同様の問題を発見しました?
これは、JDBCドライバーとの相互作用に関連している可能性があります。私のiSeries(V6R1)でネイティブに実行してもエラーは発生しません。 –
@ X-Zero:私の場合はありません。私はコンソールに同じエラー42884を再現することができます... –