[seasar-dotnet:1171] Re: DBFlute:スキーマ情報がおかしく取得される

kubo [E-MAIL ADDRESS DELETED]
2008年 11月 22日 (土) 11:03:51 JST


久保(jflute)です。

> えーと、ReplaceSchemaは是非使いたいと思っていたのですが、
> 今回は使っていませんでした。

おっと、そうでしたか。

> となってしまうことです。(半角スペースまで入ってしまう!)
> この現象って、DBFluteでは悪影響無いんでしょうか。
> (ここら辺の情報は持ってきているだけでしょうか?。)
>
> 個人的に腑に落ちないのは、これで作成したテーブルでは、
> Oracleの方で動かすとちゃんとデフォルトで0が入る事です。
> 試してみたところ、お尻にスペースも入りませんでした。

なるほど、メタ情報として半角スペースは保持されているけど、
Oracle自体が実際に利用する時にトリムするんですね。
DBFlute的にはデフォルト値はドキュメントとしてしか
利用していないので、半角スペースであれば特に問題はないかと思います。
(にしても気持ち悪いですけどね)

ちなみに、これは参考までにのTIPSですが、
「全てのテーブルにある論理削除フラグ」のようなものを使う場合、
DBFluteでは共通カラムとして設定ができるため、
DB側にデフォルト制約を付けるようなことはあまりないです。
テストデータの投入もReplaceSchemaであれば共通カラムとして
統一した値を入れることができます。
逆にそれらの機構を使わないでInsertされないように
デフォルト制約は付けないという感じですね。

2008/11/22 小林貴生 <[E-MAIL ADDRESS DELETED]>:
> いつもお世話になっております。
> 小林です。
>
>
> いろいろやっていたのですが、
> 何か分かってきたので、ご報告です。
>
>> > DDL実行は、ReplaceSchemaを利用されていますでしょうか?
>> > もし、そうであれば、DDL実行時のDDL文のログを見せて頂けますでしょうか?
>> > もしかしたら、そのときに改行が含まれた可能性もあるかもしれません。
>>
>> あと、もしReplaceSchemaで実行されている場合は、
>> 別のツールで(SQL*Plusとか)でそのDDLを実行してJDBCタスクを
>> 実行したときにどうなるか確認して頂けますでしょうか?
>> (これでReplaceSchemaが原因かどうかの切り分けができます)
>
> えーと、ReplaceSchemaは是非使いたいと思っていたのですが、
> 今回は使っていませんでした。
>
> 原因から言うと、DDLの書き方が悪かった...と言うんでしょうか。
>
> 実際は、ObjectBrowserER と言うERツールで作成したテーブルを
> フォワードエンジニアリングしてテーブルを作成したのですが、
> 以下の様なDDLを出力していました。
>
> CREATE TABLE HOGE_TBL
> (
>    HOGE_ID                        NUMBER(10,0) NOT NULL,
>    HOGE_NAME                      VARCHAR2(10),
>    HOGE_NUM                       NUMBER(10,0) DEFAULT 0
> )
> /
> ALTER TABLE HOGE_TBL
>    ADD(PRIMARY KEY (HOGE_ID) USING INDEX)
> /
>
>
> 結論から言うと、ERツールからだろうが、SQL*Plus だろうが、
> このDDLから作成したものは、改行が入ってしまっています。
>
> 以下の様にDDLを変更すると、うまく行きました。(0 の後に何も入れない様にする)
>
> CREATE TABLE HOGE_TBL
> (
>    HOGE_ID                        NUMBER(10,0) NOT NULL,
>    HOGE_NAME                      VARCHAR2(10),
>    HOGE_NUM                       NUMBER(10,0) DEFAULT 0)
> /
> ALTER TABLE HOGE_TBL
>    ADD(PRIMARY KEY (HOGE_ID) USING INDEX)
> /
>
>
> やってて気づいたのですが、半角スペースを入れた場合、
> CREATE TABLE HOGE_TBL
> (
>    HOGE_ID                        NUMBER(10,0) NOT NULL,
>    HOGE_NAME                      VARCHAR2(10),
>    HOGE_NUM                       NUMBER(10,0) DEFAULT 0 )
> /
>
>
> こんな感じになってしまいます。
>
>        <column dbType="NUMBER" default="0 " javaType="decimal?"
>            name="HOGE_NUM" size="10" type="DECIMAL"/>
>
> となってしまうことです。(半角スペースまで入ってしまう!)
> この現象って、DBFluteでは悪影響無いんでしょうか。
> (ここら辺の情報は持ってきているだけでしょうか?。)
>
>
> 個人的に腑に落ちないのは、これで作成したテーブルでは、
> Oracleの方で動かすとちゃんとデフォルトで0が入る事です。
> 試してみたところ、お尻にスペースも入りませんでした。
>
> Oracleのバージョンは、11.0.6 です。
> Oracleが自分で使っているデフォルト値と、SQLで取れるデフォルト値で
> 違うものを返しているのでしょうか。そうなのかな。
>
>
> とりあえず、default の属性がDBFluteでは悪影響を与えるのであれば、
> 出来上がったスキーマxmlの中身を数値の後に余計なものが入れないように
> スクリプトか何かで置き換える開発運用にしたいと思います。
>
> お騒がせしてすいませんでした。...もっと調べてからメールすれば良かったです。
>
>
>
> 以上、よろしくお願いいたします。
>
> 小林貴生
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内