[Seasar-user:21955] Re: 【S2JDBC】OracleのLIKE検索で全角%がエスケープされない

Taki, Minoru [E-MAIL ADDRESS DELETED]
2014年 9月 26日 (金) 22:14:41 JST


小林さん

 瀧です。

 お世話になっております。

> 本来はDialectで対応できるといいのですが、現状はLikeUtilという
> Dialectに手が届かないところで処理しているので、diconで
> カスタマイズできるような修正をしようと思います。

 さっそくのご判断ありがとうございます。

> 急いで対応が必要なら、リフレクションでLikeUtilの定数を
> 書き換えてください。
> 
> https://github.com/seasarorg/seasar2/blob/master/s2-tiger/src/main/java/org/seasar/extension/jdbc/util/LikeUtil.java
> #L29-L34

 情報ありがとうございます。
 参考にさせて頂きますが、ちょっと私には手が出せないかもです。

 以上です。

--
瀧  稔 (Taki Minoru)
E-mail: taki.minoru @ jp.fujitsu.com

> -----Original Message-----
> From: seasar-user-bounces @ ml.seasar.org [mailto:seasar-user-bounces @ ml.seasar.org] On Behalf Of Koichi Kobayashi
> Sent: Friday, September 26, 2014 7:42 PM
> To: seasar-user @ ml.seasar.org
> Subject: [Seasar-user:21954] Re: 【S2JDBC】OracleのLIKE検索で全角%がエスケープされない
> 
> 小林 (koichik) です。
> 
> 本来はDialectで対応できるといいのですが、現状はLikeUtilという
> Dialectに手が届かないところで処理しているので、diconで
> カスタマイズできるような修正をしようと思います。
> 
> 急いで対応が必要なら、リフレクションでLikeUtilの定数を
> 書き換えてください。
> 
> https://github.com/seasarorg/seasar2/blob/master/s2-tiger/src/main/java/org/seasar/extension/jdbc/util/LikeUtil.java
> #L29-L34
> 
> 2014年9月26日 14:50 kubo <dbflute @ gmail.com>:
> > 久保(jflute)です
> >
> >> #エスケープすることの方が問題???ちょっとよくわからなくなってきました。
> >
> > S2JDBCではありませんが、
> > 「Oracle11gR2でLike検索でエラーになるケース」
> > というのがあって四苦八苦した記憶があります。
> > https://groups.google.com/forum/#!topic/dbflute/LzuHYseRtmA
> >
> > 参考までにと。
> > (後半ちょっと違い話題になっちゃっていますが)
> >
> >
> > 2014-09-26 13:51 GMT+09:00 Taki, Minoru <taki.minoru @ jp.fujitsu.com>:
> >> 瀧と申します。
> >>
> >>  お世話になっております。
> >>
> >>>  LIKE検索(使用したのはcontains関数)で全角パーセント("%")がエスケープされず例外が発生します。
> >>>  知らなかったのですが、Oracleの場合、全角のパーセント("%")と全角のアンダーバー("_")も
> >>>  特殊文字として扱われるようです。(もちろん半角は問題なくエスケープされています)
> >>
> >>  一部わかったことがありましたので、補足します。
> >>
> >>  全角%だけの検索を行うと下記のログが出力されました。
> >>  実際はエスケープの処理をさせようとしているみたいなのですが、
> >>  このままのSQLでは通らないようです。
> >>
> >> #エスケープすることの方が問題???ちょっとよくわからなくなってきました。
> >>
> >> ----
> >> [26/09/2014 13:13:09:782 +0900] DEBUG 2014-09-26 13:13:09,782 [httpWorkerThread-80-4] select count(*) from XXXXXXX_XXX
> T1_ where (T1_.ITEMCD like '%$%%' escape '$') order by T1_.ITEMCD
> >> ・
> >> ・<中略>
> >> ・
> >> Caused by: org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[select count(*) from XXXXXXX_XXX
> T1_ where (T1_.ITEMCD like ? escape '$') order by T1_.ITEMCD], Message=[1424], ErrorCode=22025, SQLState={3})が発生し
> ました
> >>         at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:72)
> >>         at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:67)
> >>         at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeQuery(PreparedStatementWrapper.java:83)
> >>         at org.seasar.framework.util.PreparedStatementUtil.executeQuery(PreparedStatementUtil.java:49)
> >>         ... 136 more
> >> Caused by: java.sql.SQLDataException: ORA-01424: エスケープ文字に続く文字がないか、または無効です。
> >>
> >> [26/09/2014 13:13:09:797 +0900]         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
> >>         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
> >>         at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
> >>         at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
> >>         at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
> >>         at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
> >>         at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
> >>         at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:886)
> >>         at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1175)
> >>         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1296)
> >>         at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
> >>         at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3657)
> >>         at
> oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1495)
> >>         at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeQuery(PreparedStatementWrapper.java:81)
> >>         ... 137 more
> >> [26/09/2014 13:13:09:797 +0900] DEBUG 2014-09-26 13:13:09,797 [httpWorkerThread-80-4] トランザクションをロールバッ
> クしました。tx=[FormatId=4360, GlobalId=1411694427314/362, BranchId=]
> >> [26/09/2014 13:13:09:797 +0900] DEBUG 2014-09-26 13:13:09,797 [httpWorkerThread-80-4] 論理的なコネクションを閉じま
> した。tx=[FormatId=4360, GlobalId=1411694427314/362, BranchId=]
> >> ----
> >>
> >>  以上です。
> >>
> >>> -----Original Message-----
> >>> From: seasar-user-bounces @ ml.seasar.org [mailto:seasar-user-bounces @ ml.seasar.org] On Behalf Of Taki, Minoru
> >>> Sent: Friday, September 26, 2014 12:16 PM
> >>> To: 'seasar-user @ ml.seasar.org'
> >>> Subject: [Seasar-user:21947] 【S2JDBC】OracleのLIKE検索で全角%がエスケープされない
> >>>
> >>> 瀧と申します。
> >>>
> >>>  お世話になっております。
> >>>
> >>>  Oracle11R2でS2JDBCのjdbcManagerの自動生成SQLを使用しておりますが、
> >>>  LIKE検索(使用したのはcontains関数)で全角パーセント("%")がエスケープされず例外が発生します。
> >>>  知らなかったのですが、Oracleの場合、全角のパーセント("%")と全角のアンダーバー("_")も
> >>>  特殊文字として扱われるようです。(もちろん半角は問題なくエスケープされています)
> >>>
> >>>  自動生成SQLではできないことなのでしょうか?
> >>>  ご教授ください。
> >>>
> >>> --
> >>> 瀧  稔 (Taki Minoru)
> >>> E-mail: taki.minoru @ jp.fujitsu.com
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> Seasar-user mailing list
> >>> Seasar-user @ ml.seasar.org
> >>> https://ml.seasar.org/mailman/listinfo/seasar-user
> >> _______________________________________________
> >> Seasar-user mailing list
> >> Seasar-user @ ml.seasar.org
> >> https://ml.seasar.org/mailman/listinfo/seasar-user
> > _______________________________________________
> > Seasar-user mailing list
> > Seasar-user @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user


Seasar-user メーリングリストの案内