oracleでの自動生成について

251 views
Skip to first unread message

awaawa

unread,
Dec 3, 2009, 12:39:49 AM12/3/09
to dbf...@googlegroups.com
jfluteさん

awaawa(携帯)です。

自動生成について以下の環境でいくつか確認させてもらいたいことがあります。
お忙しいと思いますがご確認いただけますでしょうか。

dbflute0.9.6.1
ojdbc6
oracle11g

【1】
別スキーマのファンクションを自スキーマにシノニム定義すると自動生成でファンクションに対するBehaviorなどが作成されてしまう。
※自スキーマのファンクションのシノニム定義でも念のため確認してみましたが同様でした。

【2】
別スキーマのシノニム(テーブル)のPK情報等が取得されない。
※jdbcの仕様でしょうか。

【3】
isGenerateProcedureParameterBean = trueのときに
targetProcedureNameListを指定しても
存在するすべてのプロシージャが生成されてしまう。

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

jflute

unread,
Dec 3, 2009, 2:10:53 AM12/3/09
to DBFluteユーザの集い
jfluteです。

【1】
ファンクションでシノニムですか。。。初体験ですね、なるほど。
以前、似たような問題でSequenceに関しては対応しましたが、
ファンクションの場合には対応していません。
発生ベースでの対応という扱いなので、頑張ってファンクションも
除外するようにしてみますね。(あとプロシージャもかな!?)

【2】
そのユーザの権限として、シノニムの参照先テーブルへの
アクセスが認められていますでしょうか?
シノニムの参照先テーブルへの権限が無い場合は取得できないはずです。
まあ、シノニムを使うくらいなんだから権限は付与しないのが当然ですが、
ちょっと試しに付与してもう一度実行して見て下さい。
additionalPrimaryKeyか、もしくは「自動生成用ユーザ」を作って開発中は
DBFluteはそのユーザを使って自動生成を実行するか、という感じですね。

【3】
これはバグ報告ですね。
ありがとうございます。直しました。


【1】と【3】を反映したDBFlute-0.9.6.2-SNAPSHOTが
EMechaからダウンロード可能です。
とりあえずはDBFluteランタイムは0.9.6.1のものでOKです。

但し、【1】は「パッケージ付きプロシージャ・ファンクション」に
関しては、サポート対象外です。その場合は設定で明示的に除外します。
なんというか、データ・ディクショナリの扱いがひど...

awaawa

unread,
Dec 3, 2009, 6:51:47 AM12/3/09
to dbf...@googlegroups.com
awaawa(携帯)です。

ご対応ありがとうございます。
【1】
自スキーマのファンクションはOKでしたが別スキーマはNGでした。
DfSynonymExtractorOracleの105行目に以下の条件を追加したらうまくいきました。
_schema.equalsIgnoreCase(tableOwner)※適切かは別として。
ご確認いただけますでしょうか。

【2】
確認しましたがダメでした。
【1】の兼ね合いで調べてみたのですが、
DfSynonymExtractorOracleがスキーマ毎に呼ばれていないのが
原因ではないかと思うのですが、確認いただけますか。

【3】
確認できました。

【4】追加
docタスクで別スキーマのテーブルダンプでスキーマ名の指定がないため失敗してしまいます。
※ログ追ってて気づきました。
TorqueDocumentationTaskの147~158行目辺りで、
自スキーマ以外はスキーマ名設定していただけると。

ややこしいのばかりですいません。

09/12/03 jflute <dbf...@gmail.com>:

jflute

unread,
Dec 3, 2009, 9:01:19 AM12/3/09
to DBFluteユーザの集い
jfluteです。

> 【1】
そうか【2】と同様に、別スキーマのファンクションへの
権限がないと、それがファンクションかどうか分からないですね。
同様に権限を付与して試して頂けます?
(そのとき、「select * from ALL_PROCEDURES...」のログが出てくる
と思いますので、ちょっと確認お願いします)
「select * from [シノニム]ってやってエラーだったら自動生成対象外」
みたいな判定しちゃってもいいかなぁ...

試して頂いた修正は、確かに除外されますが、
違う意味で除外されているので別の普通のシノニムも
除外されてしまうはずです。

> 【2】
ふむぅ、だめですか。。。
念のため確認ですが、自スキーマユーザでログインして
「スキーマ名.テーブル名」でアクセスできます?
(別スキーマのシノニムの参照先テーブル)

DfSynonymExtractorOracleの呼び出しは自スキーマのみ一回想定です。
要は自スキーマのシノニムのみを自動生成対象にできます。

> 【3】
ご確認ありがとうございます。

> 【4】
対応してみました。
SNAPSHOT上書きしてあります。

ちなみにテーブルダンプではなく(ダンプ機能ではなく)、
機能的にはエクセルデータのテンプレートです。
ダンプって言えるほどの精度はないので。
間違いやすいので一応確認ということで。
(内部クラスの名前もちょっとリファクタしようっと)



#
# Max OS Xで動くOracle欲しいぃよぅ
# (Windows起動するのが重い...)
#


On 12月3日, 午後8:51, awaawa <p1us3inus2...@gmail.com> wrote:
> awaawa(携帯)です。
>
> ご対応ありがとうございます。
> 【1】
> 自スキーマのファンクションはOKでしたが別スキーマはNGでした。
> DfSynonymExtractorOracleの105行目に以下の条件を追加したらうまくいきました。
> _schema.equalsIgnoreCase(tableOwner)※適切かは別として。
> ご確認いただけますでしょうか。
>
> 【2】
> 確認しましたがダメでした。
> 【1】の兼ね合いで調べてみたのですが、
> DfSynonymExtractorOracleがスキーマ毎に呼ばれていないのが
> 原因ではないかと思うのですが、確認いただけますか。
>
> 【3】
> 確認できました。
>
> 【4】追加
> docタスクで別スキーマのテーブルダンプでスキーマ名の指定がないため失敗してしまいます。
> ※ログ追ってて気づきました。
> TorqueDocumentationTaskの147~158行目辺りで、
> 自スキーマ以外はスキーマ名設定していただけると。
>
> ややこしいのばかりですいません。
>
> 09/12/03 jflute <dbfl...@gmail.com>:

jflute

unread,
Dec 3, 2009, 9:29:23 AM12/3/09
to DBFluteユーザの集い
jfluteです。

> 【1】
select * from [シノニム] where 0=1
で例外が発生するか否かで自動生成対象に
するかどうかを判断するようにしました。
(SelectできないオブジェクトはBehaviorで扱えないので、
論理的にこれでOKかと)
SNAPSHOT上書きしています。

でも、【2】はやはりなんでだろう!?!?
dbflute-oracle-exampleでは、権限が付与されていれば、
PK情報取得できてるんですよね。(Oracle 10g XE)
「grant SELECT on NEXTEXAMPLEDB.VENDOR_NEXT_SCHEMA_SECRET2 to
EXAMPLEDB;」
試しにojdbc6.jarじゃなくてojdbc5.jarで試してもらってもいいですか?

awaawa

unread,
Dec 3, 2009, 10:10:36 AM12/3/09
to dbf...@googlegroups.com
awaawa(携帯)です。

【1】、【4】のSNAPSHOTは明日確認して、ご報告します。

【2】はdbflute-oracle-exampleを帰宅後確認してみます。(何か違いがあるかなど)


09/12/03 jflute <dbf...@gmail.com>:

jflute

unread,
Dec 3, 2009, 11:34:54 PM12/3/09
to DBFluteユーザの集い
jfluteです。

awaawaさん、ちょっと自分が勘違いしてたかもですが、
AAAスキーマのFOOというSynonym経由で、BBBスキーマの
BARというテーブルを参照するとき、そもそもAAAユーザに
BARに対する直接のSELECT権限がないと、AAAユーザでの
FOOへのSELECTもできないような気がしますが、どうでしたっけ?
(Oracle10gで試してたらそんな感じだったので...)

本番環境ではどういう権限構成を想定しています???

awaawa

unread,
Dec 4, 2009, 11:07:11 PM12/4/09
to DBFluteユーザの集い
awaawaです。

すいません。だいぶ返信遅くなりました。
【1】
昨日oracle11g、ojdbc6でやったら、除外されませんでした。
でも今Oracle 10g XE、ojdbc5でやったら、うまく除外されました。

で、違いを確認したのですが以下のような感じでした。(おそらく)
正しく除外されるケース
・additionalSchemaMapに指定してあるスキーマでそのスキーマのtableTargetList、tableExceptListで
除外されないオブジェクト
・additionalSchemaMapに指定していないスキーマで自スキーマのtableTargetList、tableExceptListで
除外されないオブジェクト
除外されないケース
・additionalSchemaMapに指定してあるスキーマでそのスキーマのtableTargetList、tableExceptListで
除外されるオブジェクト
・additionalSchemaMapに指定していないスキーマで自スキーマのtableTargetList、tableExceptListで
除外されるオブジェクト

ちなみに、別スキーマの該当ファンクションの実行権限はあります。
そもそも権限がないと、シノニムを作れないので。
該当ファンクションが別スキーマにあることを意識しないことを
目的にシノニムを作っています。

※なお、このケースの場合docタスクでProcedure欄に出すのは難しいでしょうか。なんか大変そうな気が・・・

【2】
dbflute-oracle-exampleを確認したのですが、
このケースがないように見受けられました。

> FOOへのSELECTもできないような気がしますが、どうでしたっけ?
そのとおりだと思います。
ただ、【2】のケースは別スキーマのSynonymを直接参照しているので、
その場合はおそらく別スキーマのSynonymの元のオブジェクトのSELECT権限は厳密にはいらないと思います。
別スキーマのSynonymのSELECT権限だけでOKのはずです。
(実際確認している環境では元オブジェクトにも権限はあります。なのでPK情報は取れるかと)

構成は感じです。
別スキーマ
TABLE_TEST_1
TABLE_TEST_2
SYNONYM_TEST (TABLE_TEST_1かTABLE_TEST_2を見ている) ★
※すべてのテーブルのSELECT権限あり。
★のオブジェクトを参照する。(PK情報が取れないケース)

以下のパターンだとPK情報は取れたと思います。
自スキーマ
SYNONYM_TEST ★
別スキーマ
TABLE_TEST_1
TABLE_TEST_2

ojdbc5.jarではまだ試せていないので試したらご報告します。

【4】
OKでした。

> ちなみにテーブルダンプではなく(ダンプ機能ではなく)、
> 機能的にはエクセルデータのテンプレートです。
了解ですー

jflute

unread,
Dec 5, 2009, 10:29:32 AM12/5/09
to DBFluteユーザの集い
jfluteです。

> 【1】
oracle11g、ojdbc6で除外されなかったときのログを
確認して頂けますでしょうか?
Synonymの一覧が表示されていて、該当のSynonymが
「selectable or unselectable」のどちらになっているか。
あと、SQLツールから「select * from [そのSynonym]」が
実行できるかどうか。
DBFluteでは「そのSQLが実行できるか否か」が
「自動生成するか否か」の判断になるので、
その結果がDBやJDBCのバージョンで変わってる
のかどうかを確認したいです。

> ※なお、このケースの場合docタスクでProcedure欄に
> 出すのは難しいでしょうか。なんか大変そうな気が・・・
そもそもSql2EntityでFunctionを参照するSynonymをFunctionとして
扱うことができないんじゃないかと思うので、まずはそっちからですね。
そっちができれば同時にDocの方は解決します。
ちなみに、そういうFunctionが幾つくらいあるのですか?

> 【2】
あ、ごめんなさい。自分がちょっと勘違いしてました。
Synonym自身が別スキーマなのですね???
Synonymもその参照先テーブルも両方とも別スキーマと。
それは確かにサポート対象外なのでPK情報取得できませんね。
自スキーマにSynonym作って、その別スキーマのSynonym(or 実体テーブル)
を参照するような構成にはできないのでしょうか???
(何かそれができない理由があったりします?)

> 【4】
ご確認ありがとうございます!


> その場合はおそらく別スキーマのSynonymの元のオブジェクト
> のSELECT権限は厳密にはいらないと思います。
> 別スキーマのSynonymのSELECT権限だけでOKのはずです。
ふむ、そうなんですねぇ。

jflute

unread,
Dec 5, 2009, 12:41:03 PM12/5/09
to DBFluteユーザの集い
jfluteです。

> 【1】
dbflute-oracle-exampleで試してみました。

exampledbのSynonym: VD_SYNONYM_NEXT_FUNCTION
nextexampledbのFunction:FN_NEXT_NO_PARAMETER

Oracle10gXE + ojdbc5.jar ==> 除外された
Oracle10gXE + ojdbc6.jar ==> 除外された
※ログを確認すると、(想定通り)unselectableになる。

> > ちなみに、別スキーマの該当ファンクションの実行権限はあります。
> > そもそも権限がないと、シノニムを作れないので。
ちなみに権限に関して、
exampledbにnextexampledbのFN_NEXT_NO_PARAMETERに
SELECT権限を付与する前でもSYNONYMの作成自体はうまくいきました。
(もちろん、実行はできないです)

> ※なお、このケースの場合docタスクでProcedure欄に
> 出すのは難しいでしょうか。なんか大変そうな気が・・・
これはとりあえず別課題の【5】としましょう。
そして、Docタスクというより、Sql2Entityにおいて、
SynonymのProcedure(Function)をどう対応するか(もしくはしないか)
って話になります。

> 【2】
dbflute-oracle-exampleでnextexampledbにシノニムを作成しました。
exampledbにも権限を与えているは、
「VD_NEXT_SYNONYM_SECRET_AUTH」
です。
ただ、additionalSchemaで自動生成対象にならないのはなんでだろう!?
awaawaさんの環境では、PK情報が取得できないだけで、
別スキーマのSynonymのクラス自動生成自体はうまくいってるんですよね?

> その場合はおそらく別スキーマのSynonymの元のオブジェクト
> のSELECT権限は厳密にはいらないと思います。
> 別スキーマのSynonymのSELECT権限だけでOKのはずです。
確かにそのような動きしました。そのSynonymへの権限だけを付与したら、
参照先のテーブルへの直接SELECTも可能になりました。
(要は自動的に参照先への権限も付与されるってことなのかな...)

jflute

unread,
Dec 5, 2009, 10:44:23 PM12/5/09
to DBFluteユーザの集い
jfluteです。

> 【1】
ソースを良く見てたら、
awaawaさんに着目通り、
DfSynonymExtractorOracleのisTableExcept()の指定がおかしいですね。
tableOwnerとsynonymNameの組み合わせになってしまっていました。
少なくとも、論理的には「(Synonymの)owner + synonymName」か、
「tableOwner + tableName」のどちらかにする必要があります。
で、ここでやりたいことは「(Synonymの)owner + synonymName」です。

恐らく、これが原因で、tableExceptの指定次第で補足Synonym情報から
そのSynonymが抜けてしまう可能性あったのだと思います。
シンプルな例では発生しづらいですが、例えば、自スキーマSynonymと
別スキーマFunction同じ名前でadditionalSchemaでtableExceptに
別スキーマFunctionの名前を指定していたりすると多分発生します。
(他にも複雑な例で発生する可能性があります)

Oracle11gとOracle10gXEでの違いはちょっと見当がつきませんが、
上記の件を直したもの(SNAPSHOT)をアップしておきました。

> 【2】
同時に、別スキーマのSynonymのPK情報の取得も頑張ってみました。
できてるかどうか不安なので試してみて下さい。
ちなみにログを確認できますが、ALL_SYNONYMSのSelect文のWhere句で
additionalSchemaのスキーマも条件に含まれています。

ただ、こちらでも試したいんですけど、dbflute-oracle-exampleで
なぜか別スキーマの Synonymが自動生成されなくて、試せてない...
VendorMetaDataTestの
test_DatabaseMetaData_getTables_NextSchemaSynonym_withAuth_Tx()
で試したところ、SELECT権限持ってる別スキーマのSynonymの情報がJDBCから
取得できませんでした。(SQLツールでALL_SYNONYMSで見れるしSelectもできますが)
こちらは、Oracle10gXEでojdbc5.jar、ojdbc6.jar両方だめでした。
そちらでは、別スキーマのSynonymをAdditionalSchemaでクラスの
自動生成ができているのでしょうか???

awaawa

unread,
Dec 6, 2009, 2:04:57 AM12/6/09
to dbf...@googlegroups.com
awaawa(携帯)です。

時間が空いてしまってすいません。
【1】
昨日のメール言葉足らずですいません。ojdbc関係なく、tableTargetList・tableExceptListの設定で挙動が変わるという意味でした。
無事ファンクションの場合、自動生成されないことを確認しました。
(tableTargetList・tableExceptListの設定をいろいろいじってもOKでした。)
ありがとうございます。

【2】
> そちらでは、別スキーマのSynonymをAdditionalSchemaでクラスの
> 自動生成ができるのでしょうか???
以前はできていたいたのですが、今はできないですね。なぜでしょう。

確かにjdbc経由だとALL_SYNONYMSで別スキーマ取れないですね。もう少し確認してみます。(なにかイレギュラーな事してたのかも)

【5】
別スキーマと同じファンクション名であれば、「別スキーマ名.ファンクション名」の形で出力されました。
ファンクション名が異なる場合出力されませんが。
ちなみに該当のファンクションは今のところ1つです。
(+別スキーマと同名です。)

#
# >https://www.seasar.org/issues/browse/DBFLUTE-604
# これいいです~dbflute-oracle-exampleを確認するのが手軽に!!
#


09/12/06 jflute <dbf...@gmail.com>:

jflute

unread,
Dec 6, 2009, 2:43:31 AM12/6/09
to DBFluteユーザの集い
jfluteです。

> 【1】
確認ありがとうございましたー。よかったー

> 【2】
確認お願いします。
Oracleちょっとやな動きしますねぇ。

> 【5】
> 別スキーマと同じファンクション名であれば、
> 「別スキーマ名.ファンクション名」の形で出力されました。
> ファンクション名が異なる場合出力されませんが。
ん!?すいません、これもうちょい具体的にお願いします。
Sql2EntityのParameterBeanのこと???
「別スキーマと同じファンクション名」ってのは、
自スキーマのSynonymと参照先のファンクション名が同じ名前ってこと?

On 12月6日, 午後4:04, awaawa <p1us3inus2...@gmail.com> wrote:
> awaawa(携帯)です。
>
> 時間が空いてしまってすいません。
> 【1】
> 昨日のメール言葉足らずですいません。ojdbc関係なく、tableTargetList・tableExceptListの設定で挙動が変わるという意味で した。
> 無事ファンクションの場合、自動生成されないことを確認しました。
> (tableTargetList・tableExceptListの設定をいろいろいじってもOKでした。)
> ありがとうございます。
>
> 【2】> そちらでは、別スキーマのSynonymをAdditionalSchemaでクラスの
> > 自動生成ができるのでしょうか???
>
> 以前はできていたいたのですが、今はできないですね。なぜでしょう。
>
> 確かにjdbc経由だとALL_SYNONYMSで別スキーマ取れないですね。もう少し確認してみます。(なにかイレギュラーな事してたのかも)
>
> 【5】
> 別スキーマと同じファンクション名であれば、「別スキーマ名.ファンクション名」の形で出力されました。
> ファンクション名が異なる場合出力されませんが。
> ちなみに該当のファンクションは今のところ1つです。
> (+別スキーマと同名です。)
>
> #
> # >https://www.seasar.org/issues/browse/DBFLUTE-604
> # これいいです~dbflute-oracle-exampleを確認するのが手軽に!!
> #
>
> 09/12/06 jflute <dbfl...@gmail.com>:
> ...
>
> もっと読む ≫

awaawa

unread,
Dec 6, 2009, 5:13:06 AM12/6/09
to dbf...@googlegroups.com
awaawa(携帯)です。

【1】
うまくいきました。1ヵ所修正が必要でしたが。
judgeSynonymSelectableメソッド(196行目)で自スキーマ以外(別スキーマ=別オーナー)のときシノニム名の前にオーナー名をつけるとうまくいきました。

先ほどメールでできないと書きましたが、自分のミスでした。
自動生成で見てた環境と確認用シノニムを作った環境が違ってました。。。
自分がやな動きしてました(笑)すいません。
(PKなど無事とれました。)
oracle11gであればojdbc5・6どちらもOKでした。
後程oracle10gXEでもやってみます。

【5】
docタスクのことだけ考えていたので表示されればいいと思ったのですが、勘違いでした。まずいですね。

> 自スキーマのSynonymと参照先のファンクション名が同じ名前ってこと?
YESです。現状(前から)同じ名前だと自スキーマのシノニムではなく別スキーマの実体が
自動生成されます。
そもそも名前が異なる場合自動生成されません。
※targetProcedureSchemaListを色々変えても無理でした。


09/12/06 jflute <dbf...@gmail.com>:

jflute

unread,
Dec 6, 2009, 5:39:51 AM12/6/09
to DBFluteユーザの集い
jfluteです。

> 【1】
> うまくいきました。1ヵ所修正が必要でしたが。
【2】だよね?w
ありがとうございます。
確かにその部分、論理的に別スキーマのSynonymの場合に、
SelectできるはずのSynonymでもSelectができませんね。
そのため、そちらで自動生成対象にならなくなってしまったようですね。
(unselectableなSynonymなので「is out of generate target!」って出るはず)
PK無事取れたようでよかったです。
(でも、本当に自スキーマにSynonymじゃダメなのかな???
ファンクションで自スキーマにSynonym作ってるくらいなので、
こっちも作ってしまえば?という感じに思うのだけど)

直したもの(SNAPSHOT)をアップしておきました。
(ReplaceSchemaでDBリンクをDropする課題の対応も含まれてます)

で、実はこっちは状況変わってなかったりして。
DBFluteの実行でも、テストケースでも取得できない、さらには
osqleditでも補完候補に出てこない。
さっきの状態でも「is out of generate target!」は出てこないし、
今直したやつでやっても、そのSynonymはselectableにはなるけど、
そもそも自動生成対象として取得されてないから何も生成されない。
あとの違いは、Oracle11gなのかOracle10gXEなのかの違いですね。
(もうJDBC経由しないで全部ALL_SYNONYMSで見ちゃった方が早いかもねぇ)

> 【5】
結局、別スキーマのファンクションを直接参照出来るので、
自スキーマのSynonymと参照先のファンクション名が同じ名前であれば、
あたかもSchemaHTMLに自スキーマのSynonymのように見えるかもですね。

> そもそも名前が異なる場合自動生成されません。
別スキーマのファンクションへの直接のParameterBeanが生成されて、
Synonymに対応するParameterBeanが自動生成されないってことだよね?
(これが現状の挙動のはず)


#
# https://www.seasar.org/issues/browse/DBFLUTE-604
# ちょくちょく仕様を修正しています。
# いつやるか不明。でも、あると実務でも便利かもねぇ。
# ディベロッパーにOracle10gXEさえローカルにインストールしてもらえば、
# 後はReplaceSchemaで全部環境整っちゃうので。
# (別のDBでも同じことだし)
#

On 12月6日, 午後7:13, awaawa <p1us3inus2...@gmail.com> wrote:
> awaawa(携帯)です。
>
> 【1】
> うまくいきました。1ヵ所修正が必要でしたが。
> judgeSynonymSelectableメソッド(196行目)で自スキーマ以外(別スキーマ=別オーナー)のときシノニム名の前にオーナー名をつけると うまくいきました。
>
> 先ほどメールでできないと書きましたが、自分のミスでした。
> 自動生成で見てた環境と確認用シノニムを作った環境が違ってました。。。
> 自分がやな動きしてました(笑)すいません。
> (PKなど無事とれました。)
> oracle11gであればojdbc5・6どちらもOKでした。
> 後程oracle10gXEでもやってみます。
>
> 【5】
> docタスクのことだけ考えていたので表示されればいいと思ったのですが、勘違いでした。まずいですね。
>
> > 自スキーマのSynonymと参照先のファンクション名が同じ名前ってこと?
>
> YESです。現状(前から)同じ名前だと自スキーマのシノニムではなく別スキーマの実体が
> 自動生成されます。
> そもそも名前が異なる場合自動生成されません。
> ※targetProcedureSchemaListを色々変えても無理でした。
>
> 09/12/06 jflute <dbfl...@gmail.com>:
> ...
>
> もっと読む ≫

awaawa

unread,
Dec 6, 2009, 9:11:33 AM12/6/09
to DBFluteユーザの集い
awaawaです。

【2】ですね。
対応ありがとうございます。
確かに、自スキーマにできればいいんですけど。
大量データでバッチ更新前後にシノニム切り替えされるので、
自スキーマにシノニムを作ると切り替えがうまくできないので。
(今回は結局その部分はなくなったのですが)
ただ、そもそもそういう場合は、
dbfluteクライアントを1つではなく、2つ用意したほうがいいですね。

【5】
> 別スキーマのファンクションへの直接のParameterBeanが生成されて、
> Synonymに対応するParameterBeanが自動生成されないってことだよね?
そのとおりです。
おっしゃるとおり、あたかもSchemaHTMLに自スキーマのSynonymのように
見えてました。。。

#
# https://www.seasar.org/issues/browse/DBFLUTE-604
# はい、実務でも便利そうです!
# なんだかんだDBの環境を整えるのって骨だったりするんで。
# ReplaceSchemaですでにだいぶ楽してますが。
#

On 12月6日, 午後7:39, jflute <dbfl...@gmail.com> wrote:
> jfluteです。
>
> > 【1】
> #https://www.seasar.org/issues/browse/DBFLUTE-604
> ...
>
> もっと読む ≫

awaawa

unread,
Dec 6, 2009, 11:59:21 AM12/6/09
to DBFluteユーザの集い
awaawaです。

こちらでもやってみましたが、やはりOracle10gXEだとダメみたいですね。

On 12月6日, 午後11:11, awaawa <p1us3inus2...@gmail.com> wrote:
> awaawaです。
>
> 【2】ですね。
> 対応ありがとうございます。
> 確かに、自スキーマにできればいいんですけど。
> 大量データでバッチ更新前後にシノニム切り替えされるので、
> 自スキーマにシノニムを作ると切り替えがうまくできないので。
> (今回は結局その部分はなくなったのですが)
> ただ、そもそもそういう場合は、
> dbfluteクライアントを1つではなく、2つ用意したほうがいいですね。
>
> 【5】> 別スキーマのファンクションへの直接のParameterBeanが生成されて、
> > Synonymに対応するParameterBeanが自動生成されないってことだよね?
>
> そのとおりです。
> おっしゃるとおり、あたかもSchemaHTMLに自スキーマのSynonymのように
> 見えてました。。。
>
> #
> #https://www.seasar.org/issues/browse/DBFLUTE-604
> ...
>
> もっと読む ≫

jflute

unread,
Dec 6, 2009, 1:17:01 PM12/6/09
to DBFluteユーザの集い
jfluteです。

> 【2】
なるほど、色々な都合があるものですね。
まあ、今回の対応で別スキーマSynonymもしっかりPK情報取得できる
ようになったということで、フィードバックありがとうございました。
んでもって、Oracle10gでダメなのは仕方がないということで。
(そっちで問題になっているわけではないし)
新しい(11g)バージョンでちゃんとしてるのであれば、時間が経てば
経つほど問題になるケースはどんどん減っていくということで。

> 【5】
Synonymで参照しているオブジェクトの中に、メタ情報として
取得できたProcedure/Functionがあれば、その名前をSynonym名に
差し替えてParameterBeanを自動生成するようにするオプション
なんてどうだろう!?

参照先Procedure/Functionに対する権限が必ずあるということなので、
Sql2Entityで直接のProcedureメタ情報はもともと取得できているので、
それらProcedureがSynonymから参照されているかどうかを判定して、
ParameterBeanのクラス名とProcedureNameだけをSysnonym名に差し替え。
で、これはデフォルトではなくオプションに(あるプロパティをtrueにすれば)。

まあ、まだゆっくり考える必要があるかな。。。
(両方自動生成したいってパターンもあるかなぁ)

> > #https://www.seasar.org/issues/browse/DBFLUTE-604
> > # はい、実務でも便利そうです!
> > # なんだかんだDBの環境を整えるのって骨だったりするんで。
> > # ReplaceSchemaですでにだいぶ楽してますが。
半分くらいできた。
さっき「いつやるかわからないけど」ってのは、
「今日のどの時間帯にやろうかな?」ってことなんだね。

でも、まだ課題あり。メインユーザがいない場合、
最初のDropでのメタ情報取得の接続でエラーになっちゃう...
そこを調整しないとだめかなぁ。
ただ、今でもユーザ作成だけは手動でやれば、
権限付与とかReplaceSchemaで管理できます。
> ...
>
> もっと読む ≫

awaawa

unread,
Dec 6, 2009, 10:02:07 PM12/6/09
to dbf...@googlegroups.com
awaawa(携帯)です。

> 【2】
こちらこそご対応ありがとうございます。

> 【5】
考えると難しいですね。
両方自動生成はなかなかないとは思いますが、
自動生成したいのが別スキーマの方ってのはありえますかね。
(これもなさそうな気が・・・)

そういえば、自・別スキーマに同じ名前のプロシージャ(ファンクション)実体があって
両方のスキーマが自動生成対象だった場合ってどうなるんでしょー。

> 半分くらいできた。
早い!
使わせていただきます。


09/12/06 jflute <dbf...@gmail.com>:

jflute

unread,
Dec 7, 2009, 2:32:39 AM12/7/09
to DBFluteユーザの集い
jfluteです。

> そういえば、自・別スキーマに同じ名前のプロシージャ(ファンクション)実体があって
> 両方のスキーマが自動生成対象だった場合ってどうなるんでしょー。
テーブルでも同じ話だけど、自・別スキーマの同じ名前のオブジェクトは
サポートされません。どっちか片方だけ利用する形になります。
(多分、どっかでエラーになるか、後勝ちになるか)

> > 半分くらいできた。
>
> 早い!
> 使わせていただきます。
できた。dbflute-oracle-exampleみてみて(readme.txt)。
systemユーザのパスワードを調整すれば、
後はReplaceSchema(二つ)だけで全部いけるはず。
(実際に、両方のスキーマをDropしてから試してOKでした)


On 12月7日, 午後12:02, awaawa <p1us3inus2...@gmail.com> wrote:
> awaawa(携帯)です。
>
> > 【2】
>
> こちらこそご対応ありがとうございます。
>
> > 【5】
>
> 考えると難しいですね。
> 両方自動生成はなかなかないとは思いますが、
> 自動生成したいのが別スキーマの方ってのはありえますかね。
> (これもなさそうな気が・・・)
>
> そういえば、自・別スキーマに同じ名前のプロシージャ(ファンクション)実体があって
> 両方のスキーマが自動生成対象だった場合ってどうなるんでしょー。
>
> > 半分くらいできた。
>
> 早い!
> 使わせていただきます。
>
> 09/12/06 jflute <dbfl...@gmail.com>:
> > #https://www.seasar.org/issues/browse/DBFLUTE-604
> ...
>
> もっと読む ≫

jflute

unread,
Dec 7, 2009, 9:32:10 AM12/7/09
to DBFluteユーザの集い
jfluteです。

使い易いように、DBFlute-0.9.6.2-RC1を出しておきました。
http://dbflute.sandbox.seasar.org/contents/migration/basic.html

【5】は、もうちょい考えます。

とりあえずawaawaさんの方では、ファンクションということで、
ParameterBeanで直接単体で呼び出すことよりも、基本は
外だしSQLの中で組み込んで利用する感じですよね?
で、SchemaHTMLでの表示が参照先のものになっていると。
(それも同じ名前ということでまあそんなに違和感ないかと)

現状考えているのは、
「Synonymの参照先がプロシージャのもの」というのを判定して、
そのシノニムもSql2Entityのプロシージャ候補に含めるようにすることで、
「プロシージャは全部シノニム経由で」とか極端なプロジェクトがあった
としても対応できるようになるかなと。
シノニムとプロシージャが同じ名前の場合は、シノニム優先!?
そういう細かいものもろもろオプションにすればかなぁ。
> ...
>
> もっと読む ≫

awaawa

unread,
Dec 7, 2009, 12:16:56 PM12/7/09
to DBFluteユーザの集い
awaawaです。

> (多分、どっかでエラーになるか、後勝ちになるか)
了解です。時間あるときにやってみます。
ただテーブルと違って、プロシージャ(ファンクション)は、
スキーマ別に対象(対象外)オブジェクトを選べなかった気がするので、
同じ名前の場合うまく除外できないような気も。
additionalSchemaMap的なものがあると。

> とりあえずawaawaさんの方では、ファンクションということで、
> ParameterBeanで直接単体で呼び出すことよりも、基本は
> 外だしSQLの中で組み込んで利用する感じですよね
ParameterBeanで呼ぶ想定ですが、外だしSQLでも問題ないです。
またとりあえず、getProcedureNameをOverrideしてもいいかと思っています。
なので急ぎではないです。

> できた。dbflute-oracle-exampleみてみて(readme.txt)。
やってみました。ReplaceSchema2つ流して、テストケース全実行OKでした。
便利ですねー、実務でも簡単に取り入れられそうです。

ただ、自分のDBが中途半端なためか、exampledb、nextexampledbをいったん削除しないとうまくいかなかったです。
またReplaceSchema2つ流した後、再度ReplaceSchema2つを流した場合も同様でした。
exampledb、nextexampledは消しとく必要があるのでしょうか。
> ...
>
> もっと読む ≫

jflute

unread,
Dec 7, 2009, 12:44:54 PM12/7/09
to DBFluteユーザの集い
jfluteです。

> ただテーブルと違って、プロシージャ(ファンクション)は、
> スキーマ別に対象(対象外)オブジェクトを選べなかった気がするので、
> 同じ名前の場合うまく除外できないような気も。
DBFluteでは、そもそもテーブルよりもプロシージャの方が
取捨選択の術は貧弱なので、器用なことはできないですね。
多分、上書きになるかとは思います。
ProcedureNameのTarget指定のところで、
「SCHEMA.PROCEDURE」という感じでドットつなぎの記述で、
完全ピンポイントな指定ができるようにしようかな。。。
(本当にいざってときのために。基本的にはやはり紛らわしいので、
別スキーマとはいえ同じ名前は極力やめようという感じだけど)

> ParameterBeanで呼ぶ想定ですが、外だしSQLでも問題ないです。
おっと、そうなのですね。
ファンクションでもそういう使い方するものなのですねぇ。
そっか、OUTを使わなくても戻り値が扱えるからか!?

> ただ、自分のDBが中途半端なためか、exampledb、nextexampledbをいったん削除しないとうまくいかなかったです。
> またReplaceSchema2つ流した後、再度ReplaceSchema2つを流した場合も同様でした。
> exampledb、nextexampledは消しとく必要があるのでしょうか。
およ!?
1. exampledbのReplaceSchema実行 (create user)
2. nextexampledbのReplaceSchema実行 (create user)
3. exampledbのReplaceSchema実行 (create userなし)
4. nextexampledbのReplaceSchema実行 (create userなし)
という順序で実行したときのって感じですよね?
exampledbやnextexampledbを明示的にdropする必要はないです。
実際にこちらでも何度実行しても特に問題無しです。
うまくいかなかったって具体的にどういう例外になりました???
> ...
>
> もっと読む ≫

jflute

unread,
Dec 7, 2009, 1:10:00 PM12/7/09
to DBFluteユーザの集い
jfluteです。

> ProcedureNameのTarget指定のところで、
> 「SCHEMA.PROCEDURE」という感じでドットつなぎの記述で、
> 完全ピンポイントな指定ができるようにしようかな。。。
https://www.seasar.org/issues/browse/DBFLUTE-608
取り急ぎ、これやってみました。(まだこっちで試してないけど...)
まだ公開通知記事出してないのでRC1上書きしています。
プロパティで「自スキーマ名.プロシージャ名前」とだけ指定すれば、
別スキーマ名の同名プロシージャはHITしないはず。
> ...
>
> もっと読む ≫

awaawa

unread,
Dec 7, 2009, 6:38:13 PM12/7/09
to dbf...@googlegroups.com
awaawa(携帯)です。

> そっか、OUTを使わなくても戻り値が扱えるからか!?
その通りです。

> https://www.seasar.org/issues/browse/DBFLUTE-608
ありがとうございます。確認してみます。

> うまくいかなかったって具体的にどういう例外になりました???
今手元にログないんで、夜にまた返信します。
特に例外は出てなかったと思うんですけどね。

ちなみにnextexampledb→exampledbの順じゃなかったでしたっけ(寝ぼけてたかな、自分)


09/12/08 jflute <dbf...@gmail.com>:

jflute

unread,
Dec 7, 2009, 8:48:52 PM12/7/09
to DBFluteユーザの集い
jfluteです。

> ちなみにnextexampledb→exampledbの順じゃなかったでしたっけ(寝ぼけてたかな、自分)
そうでした。自分が逆でした。
以下が正しいです:

1. nextexampledbのReplaceSchema実行 (create user)
2. exampledbのReplaceSchema実行 (create user)
3. nextexampledbのReplaceSchema実行 (create userなし)
4. exampledbのReplaceSchema実行 (create userなし)



On 12月8日, 午前8:38, awaawa <p1us3inus2...@gmail.com> wrote:
> awaawa(携帯)です。
>
> > そっか、OUTを使わなくても戻り値が扱えるからか!?
>
> その通りです。
>
> >https://www.seasar.org/issues/browse/DBFLUTE-608
>
> ありがとうございます。確認してみます。
>
> > うまくいかなかったって具体的にどういう例外になりました???
>
> 今手元にログないんで、夜にまた返信します。
> 特に例外は出てなかったと思うんですけどね。
>
> ちなみにnextexampledb→exampledbの順じゃなかったでしたっけ(寝ぼけてたかな、自分)
>
> 09/12/08 jflute <dbfl...@gmail.com>:
> ...
>
> もっと読む ≫

jflute

unread,
Dec 8, 2009, 5:22:32 AM12/8/09
to DBFluteユーザの集い
jfluteです。

// {Java/C#}: Procedureの自動生成対象オプションで完全修飾名での指定
https://www.seasar.org/issues/browse/DBFLUTE-608
固定テストではなく一時テストですが、こちらでも確認しました。

// {Java/C#}: Procedure参照のSynonymを扱えるようにする
https://www.seasar.org/issues/browse/DBFLUTE-607
対応しました。
outsideSqlDefinitionMap.dfpropに新たにプロパティを追加してるので、
DBFluteクライアントのテンプレートを参考にして下さい。
(あと、dbflute-oracle-exampleも参考に)
※パッケージ付きプロシージャやDBリンクはサポート対象外

// {Java/C#}: Procedureでスキーマ間で同名のものはメインスキーマを優先
https://www.seasar.org/issues/browse/DBFLUTE-609
対応しました。
自スキーマシノニムと別スキーマファンクションが同名の場合なら、
自スキーマシノニムのものが優先されます。
(dbflute-oracle-exampleでそのパターンを入れました)
(あと、もともとの挙動は後勝ちじゃなくて先勝ちでした)

// {Java/C#}: 別パッケージ同名Procedureに対応
https://www.seasar.org/issues/browse/DBFLUTE-610
要は「どさくさ」ってことなんですが、
別パッケージ同名プロシージャが扱えなかったのを扱えるようにしました。
ParameterBeanのクラス名が「パッケージ名 + プロシージャ名」になります。

以上、全てRC1に反映されています。
ちなみにDBFluteランタイムもRC1が出ています。
(ただ、0.9.6.1から何も変わってないです)

> 1. nextexampledbのReplaceSchema実行 (create user)
> 2. exampledbのReplaceSchema実行 (create user)
> 3. nextexampledbのReplaceSchema実行 (create userなし)
> 4. exampledbのReplaceSchema実行 (create userなし)
確かに変な動きしました。
「4」の終了後にSql2Entityなど自動生成を実行するとコンパイルエラーに
なるかと思います。どうやら「3」の時点でEXAMPLEDBにGRANTした
NEXTEXAMPLEDBのオブジェクトが削除されてしまうので、
権限もその時点で無くなってしまうようです。
(権限を別途SQLツールで実行し直したら直った)

要は、単独スキーマの場合に関しては問題ないけど、複数スキーマ利用時に
関してはGRANTをもう一回実行したいってところですね。
「もう一回実行したくないSQL」と「したいSQL」があると。
OracleのGRANTは同じものを実行し放題ですが、DBによっては違うかも。
どうするかなぁ。。。これ。

jflute

unread,
Dec 8, 2009, 6:30:41 AM12/8/09
to DBFluteユーザの集い
jfluteです。

> 要は、単独スキーマの場合に関しては問題ないけど、複数スキーマ利用時に
> 関してはGRANTをもう一回実行したいってところですね。
> 「もう一回実行したくないSQL」と「したいSQL」があると。
> OracleのGRANTは同じものを実行し放題ですが、DBによっては違うかも。
> どうするかなぁ。。。これ。
一度、checkUserでチェックされたユーザでも
「-- #df:reviveUser()#」と指定することで生き返るようにしました。
どこまで生き返ってるかというと、
「そのSQLファイルまで」もしくは「再度checkUser()で例外発生まで」
という感じです。dbflute-oracle-exampleを参考にして下さい。
(RC1に反映されています)


On 12月8日, 午後7:22, jflute <dbfl...@gmail.com> wrote:
> jfluteです。
>
> // {Java/C#}: Procedureの自動生成対象オプションで完全修飾名での指定https://www.seasar.org/issues/browse/DBFLUTE-608
> 固定テストではなく一時テストですが、こちらでも確認しました。
>
> // {Java/C#}: Procedure参照のSynonymを扱えるようにするhttps://www.seasar.org/issues/browse/DBFLUTE-607
> 対応しました。
> outsideSqlDefinitionMap.dfpropに新たにプロパティを追加してるので、
> DBFluteクライアントのテンプレートを参考にして下さい。
> (あと、dbflute-oracle-exampleも参考に)
> ※パッケージ付きプロシージャやDBリンクはサポート対象外
>
> // {Java/C#}: Procedureでスキーマ間で同名のものはメインスキーマを優先https://www.seasar.org/issues/browse/DBFLUTE-609
> 対応しました。
> 自スキーマシノニムと別スキーマファンクションが同名の場合なら、
> 自スキーマシノニムのものが優先されます。
> (dbflute-oracle-exampleでそのパターンを入れました)
> (あと、もともとの挙動は後勝ちじゃなくて先勝ちでした)
>
> // {Java/C#}: 別パッケージ同名Procedureに対応https://www.seasar.org/issues/browse/DBFLUTE-610

awaawa

unread,
Dec 8, 2009, 6:54:44 PM12/8/09
to DBFluteユーザの集い
awaawaです。

おー、プロシージャの指定方法がめちゃパワーアップ!! 助かります。
【5】 も、うまくできました。
(自スキーマのシノニム(別スキーマのファンクション)自動生成)
※時間あるときにいろいろやってみます。

ReplaceSchemaも2回実行、自動生成、テスト全実行OKに
なることを確認しました。

jflute

unread,
Dec 8, 2009, 7:38:17 PM12/8/09
to DBFluteユーザの集い
jfluteです。

> ReplaceSchemaも2回実行、自動生成、テスト全実行OKに
> なることを確認しました。
ありがとう!

> ※時間あるときにいろいろやってみます。
よろしくー
これでほぼ全課題いったでしょう。

awaawa

unread,
Dec 10, 2009, 11:07:56 AM12/10/09
to DBFluteユーザの集い
awaawaです。

はい、すべて解決です。
ご対応ありがとうございました。

jflute

unread,
Dec 12, 2009, 11:19:36 AM12/12/09
to DBFluteユーザの集い
jfluteです。

リリースしましたぁー

#
# DB2のAliasはプロシージャには使えないようなので、
# DB2でのProcedureSynonymの対応は不要でした。
#
Reply all
Reply to author
Forward
0 new messages