[Seasar-user:4028] Re: S2Daoで任意のテーブルに切替えたい

Kazuya Sugimoto [E-MAIL ADDRESS DELETED]
2006年 7月 6日 (木) 16:46:24 JST


杉本です。

私も同じ事をしたことがあります。
ただし、S2Dao.NETだったのですが、S2Daoでも同じ方法でできるはず。。

select * from XXX/*$date*/

のようにバインド変数に$を付けてみてください。

06/07/06 に 関さんは書きました:
> 関です
>
> 題名の通り、S2Daoを使ってテーブルを切替える方法は有りますか?
>
> S2Daoを使用してみようと思ったシステムは、
> テーブル定義は同じですが、新しいテーブルが毎日作成されます。
>
> 例:
> XXX20060701
> XXX20060702
> XXX20060703
> XXX20060704
>
> この状況でDAOのBEANにテーブル名を記述するには、毎日新しいクラスを作成する事になるのでは?
> と言うことで質問させて頂きました。
>
> 試したことは以下の通りです。
>
> 1.文字列で渡す
>         ☆DAOの定義
>         public  List    selectAll(String tableName);
>         public static final String selectAll_SQL = "SELECT * FROM /*tableName*/XXX20060101";
>
>         ☆実行部分
>         List xxx = dao.selectAll("XXX20060702");
>
>         ☆結果
>         SQLが
>         SELECT * FROM 'XXX20060701'
>         となり(テーブル名にシングルクォートが入って)エラー
>
> 2.文字列で渡す(実行部分の引数を変えてみた)
>         ☆DAOの定義
>         public  List    selectAll(String tableName);
>         public static final String selectAll_SQL = "SELECT * FROM /*tableName*/XXX20060101";
>
>         ☆実行部分
>         List xxx = dao.selectAll("\"XXX20060702\"");
>
>         ☆結果
>         SQLが
>         SELECT * FROM '"XXX20060702"'
>         となりエラー
>
>         Caused by: java.sql.SQLException: ORA-00903: 表名が無効です。
>
> 3.数字で渡す
>
>         ☆DAOの定義
>         public  List    selectAll(int tableValue);
>         public static final String selectAll_SQL = "SELECT * FROM XXX/*tableValue*/20060101";
>
>         ☆実行部分
>         List xxx = dao.selectAll(20060702);
>
>         ☆結果
>         以下の様なエラー出力とともにエラー
>
>         org.seasar.framework.exception.SQLRuntimeException: [ESSR0071]SQLで例外(ErrorCode=933, SQLState=42000)が発生しました。理由はorg.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[SELECT * FROM XXX?], ErrorCode=933, SQLState=42000)が発生しました
>                 ... 中略
>         Caused by: org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[SELECT * FROM XXX?], ErrorCode=933, SQLState=42000)が発生しました
>                 ... 中略
>         Caused by: java.sql.SQLException: ORA-00933: SQLコマンドが正しく終了されていません。
>
> 4.意味はないけどSQLコメントの中身を消してみた
>
>         ☆DAOの定義
>         public  List    selectAll(int tableValue);
>         public static final String selectAll_SQL = "SELECT * FROM XXX/**/20060701";
>
>         ☆実行部分
>         List xxx = dao.selectAll(20060702);
>
>         ☆結果
>         正常 = XXX20060701 のデータの取得可能
> (引数とかは無視されるのかな??)
>
> S2Daoでテーブルの切替
> http://www.seasar.org/wiki/index.php?AnsweringYourQuestions#n4635c3d
> と言うのも発見したのですが、既知の既存テーブルを切替える方法でした。
>
> 未来に作成されるテーブルに切替える方法がありましたらお聞かせ下さい。
>
>
> よろしくお願い致します。

-- 
Kazuya Sugimoto
http://d.hatena.ne.jp/sugimotokazuya/



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