自動生成時のカラムに対するデフォルト値取得について

532 views
Skip to first unread message

awaawa

unread,
May 18, 2011, 12:11:45 PM5/18/11
to DBFluteユーザの集い
jfluteさん

awaawaです。

自動生成時のカラムに対するデフォルト値取得についてです。

oracleのディクショナリからカラムのデフォルト値を取得すると、
DDLの内容によって、半角スペースやダブルクォーテーション、改行が混入する場合があります。
そのため、自動生成されたbsentityソースのjavadocコメントにもそれらの文字が混入してしまいます。
取得後にトリムしていただくことは可能でしょうか。

環境 oracle11g、jdk1.6、ojdbc6、dbflute0.9.6.4

DDL文例
CREATE TABLE TEST_DATA_DEFAULT
(
TEST1 VARCHAR2(1) DEFAULT '0',
TEST2 VARCHAR2(1) DEFAULT '0' NOT NULL,
TEST3 NUMBER(1,0) DEFAULT 0 NOT NULL,
TEST4 VARCHAR2(1) DEFAULT '0'
)

確認SQL
SELECT COLUMN_NAME, DATA_DEFAULT
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'TEST_DATA_DEFAULT'

結果
TEST1 問題なし。
TEST2,3 半角スペース混入
TEST4 ダブルクォーテーション、改行混入
※DDLのTEST4部分にsql行コメントを入れるとそれも混入されてします。

ご確認お願いします。

kubo

unread,
May 19, 2011, 12:42:02 PM5/19/11
to dbf...@googlegroups.com
jfluteです。

awaawaさん、こんばんは

なるほどね。Oracleはエラーメッセージとかも
最後に改行が変にくっ付いてたりとややこしい。
トリムするのは簡単だし、DBFluteでデフォルト制約の値は
ドキュメント上での利用しかないので、特に問題ないでしょう。

確認したいのは、実際にデフォルト値を使って
データ登録した場合には、カラムの値としては
改行やらスペースやらってのは混入されないのかな?
(カラムサイズを 2 以上にした場合とかでも)
つまり、メタデータ上だけの話なのか、実際の値もそうなのか?

あと、TEST4のダブルクォーテーションってすごいね。
どこにもダブルクォーテーションは存在しないのに、
"0" って感じでダブルクォーテーションで囲われるの?
改行も、って言ってるけど、一体どんな感じになるのかな?

改行やスペースのみのトリムは容易に対応してもいいかなだけど、
ダブルクォーテーションはどうしようかなというか、
どういう風に取り除くのがいいのかなって悩むところで。
(Oracleのデフォルト値の両端のDQを問答無用で外していいのか)

2011/5/19 awaawa <p1us3i...@gmail.com>:

> --
> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
> このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
> このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
>
>

awaawa

unread,
May 19, 2011, 1:27:13 PM5/19/11
to DBFluteユーザの集い
jfluteさん

awaawaです。

今手元で確認できないので、記憶を頼りに。(明日確認します。)
結果イメージです。※\r\nは実際改行です。
------------------
|TEST1|'0'|
------------------
|TEST2|'0' |
------------------
|TEST3|0 |
------------------
|TEST4|"'0' \r\n"|
------------------

おそらくですが、
DDL上の「,」か「NOT NULL」か「)」までをDATA_DEFAULTに入れているようです。

> 確認したいのは、実際にデフォルト値を使って
> データ登録した場合には、カラムの値としては
> 改行やらスペースやらってのは混入されないのかな?
> (カラムサイズを 2 以上にした場合とかでも)
> つまり、メタデータ上だけの話なのか、実際の値もそうなのか?
メタデータだけだと思います。
カラムサイズを 2 以上はやっていないので、明日確認します。

On 5月20日, 午前1:42, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> awaawaさん、こんばんは
>
> なるほどね。Oracleはエラーメッセージとかも
> 最後に改行が変にくっ付いてたりとややこしい。
> トリムするのは簡単だし、DBFluteでデフォルト制約の値は
> ドキュメント上での利用しかないので、特に問題ないでしょう。
>
> 確認したいのは、実際にデフォルト値を使って
> データ登録した場合には、カラムの値としては
> 改行やらスペースやらってのは混入されないのかな?
> (カラムサイズを 2 以上にした場合とかでも)
> つまり、メタデータ上だけの話なのか、実際の値もそうなのか?
>
> あと、TEST4のダブルクォーテーションってすごいね。
> どこにもダブルクォーテーションは存在しないのに、
> "0" って感じでダブルクォーテーションで囲われるの?
> 改行も、って言ってるけど、一体どんな感じになるのかな?
>
> 改行やスペースのみのトリムは容易に対応してもいいかなだけど、
> ダブルクォーテーションはどうしようかなというか、
> どういう風に取り除くのがいいのかなって悩むところで。
> (Oracleのデフォルト値の両端のDQを問答無用で外していいのか)
>
> 2011/5/19 awaawa <p1us3inus2...@gmail.com>:

awaawa

unread,
May 20, 2011, 11:35:03 PM5/20/11
to DBFluteユーザの集い
jfluteさん

awaawaです。

もろもろ確認しました。
SQL、およびSQL結果を添付しましたのでご確認をお願いします。

やはり、DDL上の「,」か「NOT NULL」か「)」までをDATA_DEFAULTに入れているようです。
insertについては問題ありませんでした。
DATA_DEFAULTにスペースや改行が混入しているカラムであっても
DDLで指定したデフォルト値のみが入ることを確認しました。

また、自分が勘違いしていたところがひとつありました。
ダブルクォーテーション混入するパターンですが、
実際は、改行が混入されているため、csv出力でエスケープされているだけでした。
つまり、ダブルクォーテーションは混入されません。

ご確認よろしくお願いします。

11/05/20 awaawa <p1us3i...@gmail.com>:

sql.txt
sql結果.xls

kubo

unread,
May 20, 2011, 11:43:48 PM5/20/11
to dbf...@googlegroups.com
jfluteです。

awaawaさん、なるほどありがとう。
なんともだねー。
実はMySQLのBIT型のデフォルト制約でも
似たような変な現象がありました。

もうDBFluteではデフォルト値をトリムしちゃいましょう。
空白のみ、両端に空白があるデフォルト値とかの場合に
正確なものになりませんが、そんなデフォルト値やること
ほぼないでしょうということと、どのみちJavaDocコメントや
SchemaHTML上の話なので(処理として使わないので)。

ちょっとやっておきますね。

2011/5/21 awaawa <p1us3i...@gmail.com>:

awaawa

unread,
May 21, 2011, 12:28:36 AM5/21/11
to dbf...@googlegroups.com
awaawaです。

jfluteさん

ありがとうございます。
というか、oracleは別(内部的)にデフォルト値持っているんですかね。。。

対応よろしくお願いします。

11/05/21 kubo <dbf...@gmail.com>:

kubo

unread,
May 22, 2011, 7:18:01 AM5/22/11
to dbf...@googlegroups.com
jfluteです。

こちら、別件で公開しているSNAPSHOTで
既に反映されています。
(デフォルト値ってOracleに限らず怖いねぇ...)

2011/5/21 awaawa <p1us3i...@gmail.com>:

awaawa

unread,
May 22, 2011, 8:20:58 AM5/22/11
to DBFluteユーザの集い
awaawaです。

明日確認します。報告は夜中になると思います。

sqlコメントが入るパターンは修正対象外の認識でいいでしょうか。
現状DDLにsqlコメントが入るケースはないため、問題はありません。
あくまで調査のために考えたパターンなので。

On 5月22日, 午後8:18, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> こちら、別件で公開しているSNAPSHOTで
> 既に反映されています。
> (デフォルト値ってOracleに限らず怖いねぇ...)
>
> 2011/5/21 awaawa <p1us3inus2...@gmail.com>:
>
> > awaawaです。
>
> > jfluteさん
>
> > ありがとうございます。
> > というか、oracleは別(内部的)にデフォルト値持っているんですかね。。。
>
> > 対応よろしくお願いします。
>
> > 11/05/21 kubo <dbfl...@gmail.com>:
> >> jfluteです。
>
> >> awaawaさん、なるほどありがとう。
> >> なんともだねー。
> >> 実はMySQLのBIT型のデフォルト制約でも
> >> 似たような変な現象がありました。
>
> >> もうDBFluteではデフォルト値をトリムしちゃいましょう。
> >> 空白のみ、両端に空白があるデフォルト値とかの場合に
> >> 正確なものになりませんが、そんなデフォルト値やること
> >> ほぼないでしょうということと、どのみちJavaDocコメントや
> >> SchemaHTML上の話なので(処理として使わないので)。
>
> >> ちょっとやっておきますね。
>
> >> 2011/5/21 awaawa <p1us3inus2...@gmail.com>:
> >>> jfluteさん
>
> >>> awaawaです。
>
> >>> もろもろ確認しました。
> >>> SQL、およびSQL結果を添付しましたのでご確認をお願いします。
>
> >>> やはり、DDL上の「,」か「NOT NULL」か「)」までをDATA_DEFAULTに入れているようです。
> >>> insertについては問題ありませんでした。
> >>> DATA_DEFAULTにスペースや改行が混入しているカラムであっても
> >>> DDLで指定したデフォルト値のみが入ることを確認しました。
>
> >>> また、自分が勘違いしていたところがひとつありました。
> >>> ダブルクォーテーション混入するパターンですが、
> >>> 実際は、改行が混入されているため、csv出力でエスケープされているだけでした。
> >>> つまり、ダブルクォーテーションは混入されません。
>
> >>> ご確認よろしくお願いします。
>
> >>> 11/05/20 awaawa <p1us3inus2...@gmail.com>:

kubo

unread,
May 22, 2011, 8:37:41 AM5/22/11
to dbf...@googlegroups.com
jfluteです。

> sqlコメントが入るパターンは修正対象外の認識でいいでしょうか。
> 現状DDLにsqlコメントが入るケースはないため、問題はありません。
> あくまで調査のために考えたパターンなので。

これは修正対象外としましょう。キリがないしレアケースなので。
万が一、あってもドキュメント上だけの話だし。

2011/5/22 awaawa <p1us3i...@gmail.com>:

awaawa

unread,
May 22, 2011, 10:39:29 AM5/22/11
to DBFluteユーザの集い
awaawaです。

了解です。
確認し次第、連絡します。

On 5月22日, 午後9:37, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> > sqlコメントが入るパターンは修正対象外の認識でいいでしょうか。
> > 現状DDLにsqlコメントが入るケースはないため、問題はありません。
> > あくまで調査のために考えたパターンなので。
>
> これは修正対象外としましょう。キリがないしレアケースなので。
> 万が一、あってもドキュメント上だけの話だし。
>
> 2011/5/22 awaawa <p1us3inus2...@gmail.com>:
> ...
>
> もっと読む ≫

awaawa

unread,
May 24, 2011, 2:27:57 PM5/24/11
to DBFluteユーザの集い
awaawaです。

確認しました。
改行、スペースともに除去されていました。

ただディクショナリ上に
「'0'」(文字列)で登録されているものが、
jdbc経由で取得すると「0」になっているみたいです。
(深くまでみれてないです。)
おそらくjdbcの問題だと思うので、今回の修正は関連していないと思います。
とりあえず、現状維持でいいかと。
> ...
>
> もっと読む ≫

kubo

unread,
May 28, 2011, 12:01:01 AM5/28/11
to dbf...@googlegroups.com
jfluteです。

確認ありがとう。
JDBCは怖いのぅ...

2011/5/25 awaawa <p1us3i...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages