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

Taki, Minoru [E-MAIL ADDRESS DELETED]
2014年 10月 22日 (水) 10:14:10 JST


小林さん

 瀧です。

 お世話になります。

> 遅くなりましたが、修正してスナップショットを
> デプロイしたのでご確認ください。
> # 今回修正したのはs2-tigerのみ。

 ありがとうございます。
 確認させて頂きます。
 取り急ぎお礼まで。

--
瀧  稔 (Taki Minoru)

> -----Original Message-----
> From: seasar-user-bounces @ ml.seasar.org [mailto:seasar-user-bounces @ ml.seasar.org] On Behalf Of Koichi Kobayashi
> Sent: Monday, October 20, 2014 2:55 AM
> To: seasar-user @ ml.seasar.org
> Subject: [Seasar-user:21974] Re: 【S2JDBC】OracleのLIKE検索で全角%がエスケープされない
> 
> 小林 (koichik) です。
> 
> 遅くなりましたが、修正してスナップショットを
> デプロイしたのでご確認ください。
> # 今回修正したのはs2-tigerのみ。
> 
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-framework/2.4.48-SNAPSHOT/s2-framework-2.4.48-201410
> 19.174214-3.jar
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-extension/2.4.48-SNAPSHOT/s2-extension-2.4.48-201410
> 19.174214-3.jar
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-tiger/2.4.48-SNAPSHOT/s2-tiger-2.4.48-20141019.17493
> 7-3.jar
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2jdbc-gen/2.4.48-SNAPSHOT/s2jdbc-gen-2.4.48-20141019.1
> 75007-3.jar
> 
> 
> s2jdbc.dicon辺りで以下のように設定してください。
> 
>     <component name="jdbcManager"
>       class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
>         ...
> 
>         <initMethod>
>           @org.seasar.extension.jdbc.util.LikeUtil @ setWildcardPatternAsString("[%_]"),
>           @org.seasar.extension.jdbc.util.LikeUtil @ setWildcardReplacementPatternAsString("[$%_]")
>         </initMethod>
>     </component>
> 
> 
> 
> On Fri, 26 Sep 2014 13:14:41 +0000, "Taki, Minoru" <taki.minoru @ jp.fujitsu.com> wrote:
> 
> > 小林さん
> >
> >  瀧です。
> >
> >  お世話になっております。
> >
> > > 本来は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 mailing list
> > Seasar-user @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> 
> 
> --
> {
>   name: "Koichi Kobayashi",
>   mail: "koichik @ improvement.jp",
>   blog: "http://d.hatena.ne.jp/koichik/",
>   twitter: "@koichik"
> }
> 
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user


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