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

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


久保さん

 瀧です。

> S2JDBCではありませんが、
> 「Oracle11gR2でLike検索でエラーになるケース」
> というのがあって四苦八苦した記憶があります。
> https://groups.google.com/forum/#!topic/dbflute/LzuHYseRtmA
> 
> 参考までにと。
> (後半ちょっと違い話題になっちゃっていますが)

 情報ありがとうございます。
 MLの検索で唯一この件が引っかかったのはわかっていたのですが、
 dbfluteだったので、S2JDBCはどうなのかと思いメールした次第です。
 やっぱり同じ問題をかかえていたのですね。

 参考にさせて頂きます。

--
瀧  稔 (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 kubo
> Sent: Friday, September 26, 2014 2:50 PM
> To: seasar-user @ ml.seasar.org
> Subject: [Seasar-user:21950] Re: 【S2JDBC】OracleのLIKE検索で全角%がエスケープされない
> 
> 久保(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 メーリングリストの案内