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

小林貴生 [E-MAIL ADDRESS DELETED]
2008年 11月 22日 (土) 10:47:53 JST


いつもお世話になっております。
小林です。


いろいろやっていたのですが、
何か分かってきたので、ご報告です。

> > 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 メーリングリストの案内