[Seasar-user:17089] Re: [dbflute] 2 WAY SQLのリテラルが、そのまま SQLに出てしまう
Masanobu Shimura
[E-MAIL ADDRESS DELETED]
2009年 3月 20日 (金) 19:57:18 JST
久保さん
早速のコメントありがとうございました。
最初は前の空白はなさそうに見えたので、更にたしてしまいました。
再度空白を削りましたら、上手く行きました。
お手数をおかけしました。
志村
2009/03/20 19:28 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保です。
>
> 志村さん、こんばんは
>
> > user_role.loginname = /*pmb.loginname*/ 'mike'
> > AND transaction_screen.screen = /*pmb.screen*/ '/example/vdr'
>
> バインド変数コメントとテスト値の間に空白「 」が
> 入っているように見えます。こちらの空白を削って
> もう一度試して頂けないでしょうか?
>
> 「/*pmb.loginname*/ 'mike'」
> ↓
> 「/*pmb.loginname*/'mike'」
>
> 「*pmb.screen*/ '/example/vdr'」
> ↓
> 「*pmb.screen*/'/example/vdr'」
>
> ちなみに基点テーブルのとあるカラムの
> Max値を取得するのであれば、
>
> transactionScreenBhv.scalarSelect(new ScalarQuery<TransactionScreenCB>{
> public void query(TransactionScreenCB cb) {
> cb.specify().columnLevel();
> cb.query()... // その他絞り込み条件
> }
> });
>
> で、実現可能です。
> dbflute-basic-exampleのBehaviorMiddleTestの
> test_scalarSelect_max_Tx()にExample実装あります。
>
> 2009/3/20 Masanobu Shimura <[E-MAIL ADDRESS DELETED]>:
> > 久保さん
> > はまってしまったので、教えて下さい。
> > なお SQL文を下記に修正すれば通りますので、急いではいませんが。
> > また /*IF にしても同様で、変化ありません。
> > dbflute runtime 0.9.3、S2 2.4.33 で、 dbflute-basic-exampleは、ERRORなく通ります。
> > 志村
> >
> > 通る SQL文
> > WHERE
> > user_role.loginname = /*pmb.loginname*/
> > AND transaction_screen.screen = /*pmb.screen*/
> >
> > ERROR 外だし SQL文
> > -- !SelectLevelPmb!
> > -- !!String loginname!!
> > -- !!String screen!!
> > SELECT
> > MAX(LEVEL)
> > FROM
> > transaction_screen
> > JOIN tran_role
> > ON transaction_screen.transaction = tran_role.transaction
> > JOIN user_role
> > ON user_role.role = tran_role.role
> > WHERE
> > user_role.loginname = /*pmb.loginname*/ 'mike'
> > AND transaction_screen.screen = /*pmb.screen*/ '/example/vdr'
> > 実行LOG
> > DEBUG 2009-03-20 17:39:44,519 [main] 論理的なコネクションを取得しました。tx=[FormatId=4360,
> > GlobalId=1237538384068/0, BranchId=]
> > DEBUG 2009-03-20 17:39:44,529 [main]
> > -- !SelectLevelPmb!
> > -- !!String loginname!!
> > -- !!String screen!!
> > SELECT
> > MAX(LEVEL)
> > FROM
> > transaction_screen
> > JOIN tran_role
> > ON transaction_screen.transaction = tran_role.transaction
> > JOIN user_role
> > ON user_role.role = tran_role.role
> > WHERE
> > user_role.loginname = 'mike' 'mike'
> > AND transaction_screen.screen = '/example/menu' '/example/vdr'
> > DEBUG 2009-03-20 17:39:44,627 [main] 論理的なコネクションを閉じました。tx=[FormatId=4360,
> > GlobalId=1237538384068/0, BranchId=]
> > DEBUG 2009-03-20 17:39:44,627 [main] END
> > org.seasar.ef.example.agile.logic.TransactionLogic#GetLevel(mike,
> > /example/menu)
> Throwable:org.seasar.dbflute.exception.SQLFailureException:
> > Look! Read the message below.
> > /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> > The SQL failed to execute!
> > [Advice]
> > Please confirm the SQLException message.
> > [SQLState]
> > 42601
> > [ErrorCode]
> > 0
> > [SQLException]
> > org.seasar.framework.exception.SSQLException
> > [ESSR0072]SQLで例外(SQL=[-- !SelectLevelPmb!
> > -- !!String loginname!!
> > -- !!String screen!!
> > SELECT
> > MAX(LEVEL)
> > FROM
> > transaction_screen
> > JOIN tran_role
> > ON transaction_screen.transaction = tran_role.transaction
> > JOIN user_role
> > ON user_role.role = tran_role.role
> > WHERE
> > user_role.loginname = ? 'mike'
> > AND transaction_screen.screen = ? '/example/vdr'], Message=[0],
> > ErrorCode=42601, SQLState={3})が発生しました
> > [NextException]
> > org.postgresql.util.PSQLException
> > ERROR: syntax error at or near "'mike'"
> > [Behavior]
> > TranRoleBhv.outsideSql().selectList()
> > [OutsideSql]
> > org/seasar/ef/example/agile/dbflute/exbhv/TranRoleBhv_selectLevel.sql
> > [ParameterBean]
> > org.seasar.ef.example.agile.dbflute.exbhv.pmbean.SelectLevelPmb
> > {mike,/example/menu}
> > [Statement]
> > org.seasar.extension.jdbc.impl.PreparedStatementWrapper
> > [Display SQL]
> > -- !SelectLevelPmb!
> > -- !!String loginname!!
> > -- !!String screen!!
> > SELECT
> > MAX(LEVEL)
> > FROM
> > transaction_screen
> > JOIN tran_role
> > ON transaction_screen.transaction = tran_role.transaction
> > JOIN user_role
> > ON user_role.role = tran_role.role
> > WHERE
> > user_role.loginname = 'mike' 'mike'
> > AND transaction_screen.screen = '/example/menu' '/example/vdr'
> > * * * * * * * * * */
> > DEBUG 2009-03-20 17:39:44,640 [main]
> トランザクションをロールバックしました。tx=[FormatId=4360,
> > GlobalId=1237538384068/0, BranchId=]
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> >
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20090320/bdd35c31/attachment.html>
Seasar-user メーリングリストの案内