[seasar-dotnet:1113] Re: S2Dao.NET、DBFlute - Oracleのパッケージ対応について

kubo [E-MAIL ADDRESS DELETED]
2008年 10月 30日 (木) 11:12:24 JST


久保(jflute)です。

なるほど、了解です。
ありがとうございます。

> 今回はDBFlute C#版導入にあたっての調査、かつプロジェクト用の
> サンプルソースの作成だったので、たまたまファンクションを単体で
> 実行してみた次第です。

要件として非常に薄い部分のプログラム動作が確認できるので、
こちらとしてはとてもありがたいです。
(今回の件、森脇さんがサンプルを作らなかったら
 しばらくの間、発覚しなかったと思うので)

2008/10/30 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
> 久保さん
> 森脇です
>
>> ファンクションの用途って、自分の個人的な感覚では
>> 「SQLの中に組み込んで利用する」というのをイメージ
>> していて、あまりアプリ(JavaやC#)側から直接呼び出す
>> ことはあまり無いのでは!?と思っていたのですが、
> 私も同じです。周りにいる人にも聞いてみましたけどそんな使い方
> はしないと言われました。(ものすごく狭い範囲ですが…)
>
> 今回はDBFlute C#版導入にあたっての調査、かつプロジェクト用の
> サンプルソースの作成だったので、たまたまファンクションを単体で
> 実行してみた次第です。
>
> # サンプルを作成しましたけど、このプロジェクトでも単体では
> # ファンクションは呼ばないです。
>
> 2008/10/30 10:39 kubo <[E-MAIL ADDRESS DELETED]>:
>> 久保(jflute)です。
>>
>> 森脇さん、おはようございます。
>> ご報告ありがとうございます!
>> 原因はOracleのファンクションに限定した話だけでなく、
>> 別のDBでも戻り値のあるストアドが(多分)バグっていたので、
>> 良い修正ができました。
>>
>> で、ちょっと後学のためにお聞きしたいのですが、
>> ファンクションの用途って、自分の個人的な感覚では
>> 「SQLの中に組み込んで利用する」というのをイメージ
>> していて、あまりアプリ(JavaやC#)側から直接呼び出す
>> ことはあまり無いのでは!?と思っていたのですが、
>> (少なくともプロシージャとファンクションが両方サポート
>>  されているDBMSにおいては)
>> 森脇さんのところではどうなのでしょう?
>>
>> #
>> # 自分の周りの人何人かにちょっと聞いても
>> # 同じような意識ではありましたので。
>> #
>>
>> 2008/10/30 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>> 久保さん
>>> 森脇です
>>>
>>> dbflute-0.8.3にてファンクション、パッケージのファンクションが
>>> 正常に実行されることをMbUnitで確認しました。
>>> 対応ありがとうございました。
>>>
>>>
>>> 2008/10/29 23:54 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>> 森脇です
>>>>
>>>>> http://dbflute.sandbox.seasar.org/download/dbflute/dbflute-0.8.3.zip
>>>>> (DBFlute-0.8.3のSNAPSHOT)
>>>>>
>>>>> にて対応しました。
>>>>> お手数ですが、ご確認頂けますでしょうか?
>>>> おお、迅速な対応ありがとうございます。
>>>> 明日にでも試してみます。
>>>>
>>>>
>>>> 2008/10/29 23:48 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>> 久保(jflute)です。
>>>>>
>>>>> http://dbflute.sandbox.seasar.org/download/dbflute/dbflute-0.8.3.zip
>>>>> (DBFlute-0.8.3のSNAPSHOT)
>>>>>
>>>>> にて対応しました。
>>>>> お手数ですが、ご確認頂けますでしょうか?
>>>>> (dbflute-noracle-exampleにてExampleもございます)
>>>>>
>>>>> また、C#版DBFluteはテスト環境がMySQLとOracleしか
>>>>> ありません。(Java版は7DB全てあるのですが...)
>>>>> 他のDBでのプロシージャ実行に影響あるかどうかが
>>>>> 確認できませんので、もしよろしければ、
>>>>> ML読んでるどなたか試して頂けると非常に助かります。
>>>>>
>>>>> 2008/10/29 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>> 久保(jflute)です。
>>>>>>
>>>>>>> パラメータが存在しないファンクションにも関わらず
>>>>>>> 「'Xxx'の呼出しで、引数の数または型が正しくありません」
>>>>>>> というエラーになりました。
>>>>>>> ADO.NETの呼び出しで何か工夫しないといけないのかもしれません。
>>>>>>
>>>>>> ファンクションは、戻り値があるというところが
>>>>>> プロシージャと違うところですが(Oracleの場合)、
>>>>>> そのハンドリングがうまくいっていないようでした。
>>>>>> Javaでは戻り値は内部的にOUTパラメータとして
>>>>>> 扱うことで取得することができましたが、C#では
>>>>>> 違うようなので修正します。
>>>>>> (Exampleで試し実装して実行できました)
>>>>>>
>>>>>> 2008/10/29 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>>> 久保(jflute)です。
>>>>>>>
>>>>>>> C#版DBFlute + Oracleストアドファンクションで
>>>>>>> 同じエラーが再現しました。
>>>>>>> (dbflute-noracle-exampleにてExampleをコミットしました)
>>>>>>>
>>>>>>> パラメータが存在しないファンクションにも関わらず
>>>>>>> 「'Xxx'の呼出しで、引数の数または型が正しくありません」
>>>>>>> というエラーになりました。
>>>>>>> ADO.NETの呼び出しで何か工夫しないといけないのかもしれません。
>>>>>>> (どなたかADO.NETからファンクションを呼び出した
>>>>>>> 経験のある方いらっしゃらないでしょうか!?)
>>>>>>>
>>>>>>> 2008/10/29 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>>>>> 森脇です。
>>>>>>>>
>>>>>>>>> すいません、そのファンクションでのエラー内容は
>>>>>>>>> 以前のメールでもらったのと同じ内容でしょうか?
>>>>>>>> すいません、ちょっと環境が無いので確認できませんが
>>>>>>>> たしか同じ内容だったはずです。
>>>>>>>>
>>>>>>>>
>>>>>>>> 2008/10/29 18:07 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>> 久保(jflute)です。
>>>>>>>>>
>>>>>>>>>>> プロシージャ、パッケージのプロシージャは実行できましたが、、
>>>>>>>>>>> ファンクション、パッケージのファンクションはエラーになりました。
>>>>>>>>>
>>>>>>>>> すいません、そのファンクションでのエラー内容は
>>>>>>>>> 以前のメールでもらったのと同じ内容でしょうか?
>>>>>>>>>
>>>>>>>>> 2008/10/29 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>> 久保(jflute)です。
>>>>>>>>>>
>>>>>>>>>> 森脇さん、こんばんは
>>>>>>>>>>
>>>>>>>>>> 取り急ぎコメントします。
>>>>>>>>>>
>>>>>>>>>>> プロシージャ、パッケージのプロシージャは実行できましたが、、
>>>>>>>>>>> ファンクション、パッケージのファンクションはエラーになりました。
>>>>>>>>>> なるほど、了解です。
>>>>>>>>>> ポイントはファンクションのようですね。
>>>>>>>>>>
>>>>>>>>>> ファンクションに関しては、Example上では
>>>>>>>>>>
>>>>>>>>>> Java版:ファンクションOK、パッケージファンクション未確認
>>>>>>>>>> C#版:両方とも未確認
>>>>>>>>>>
>>>>>>>>>> です。
>>>>>>>>>> ちょと後で試してみます。
>>>>>>>>>> (夜になります)
>>>>>>>>>>
>>>>>>>>>> 2008/10/29 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>> 藤井さん
>>>>>>>>>>> 森脇です
>>>>>>>>>>>
>>>>>>>>>>> 回答ありがとうございます。
>>>>>>>>>>>
>>>>>>>>>>>> とあるので、ストアド?ファンクション?のDDLの方から一度確認して
>>>>>>>>>>>> いただけないでしょうか。
>>>>>>>>>>> SQL Plusで実行してみましたが問題なく実行されました。
>>>>>>>>>>>
>>>>>>>>>>> DBFluteからではなくS2DAO.NETで直接呼べるか試してみます。
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> 2008/10/27 2:19 Hiroaki Fujii <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>>> コミッタの藤井です。
>>>>>>>>>>>>
>>>>>>>>>>>> ご返事が遅くなり、申し訳ありません。
>>>>>>>>>>>>
>>>>>>>>>>>> Quillを使った結果しか試せてませんが、次のようなinterfaceを
>>>>>>>>>>>> 使ってテストしました。
>>>>>>>>>>>> 「パッケージ.ファンクション」形式です。
>>>>>>>>>>>>
>>>>>>>>>>>> [S2Dao]
>>>>>>>>>>>> [Implementation]
>>>>>>>>>>>> [Bean(typeof (SampleDto))]
>>>>>>>>>>>> public interface IHoge
>>>>>>>>>>>> {
>>>>>>>>>>>>    [Procedure("test_pack.get_amount")]
>>>>>>>>>>>>    int GetAmount(int id);
>>>>>>>>>>>>
>>>>>>>>>>>>    [Procedure("test_pack.get_name")]
>>>>>>>>>>>>    string getName(int id, int amount);
>>>>>>>>>>>> }
>>>>>>>>>>>>
>>>>>>>>>>>> S2DAO.NET側では特に問題なく、実行できました。
>>>>>>>>>>>>
>>>>>>>>>>>> エラーを見ると、
>>>>>>>>>>>>> ORA-06550: 行1、列15:
>>>>>>>>>>>>> PLS-00306: 'NAME'の呼出しで、引数の数または型が正しくありません。
>>>>>>>>>>>>> ORA-06550: 行1、列7:
>>>>>>>>>>>> とあるので、ストアド?ファンクション?のDDLの方から一度確認して
>>>>>>>>>>>> いただけないでしょうか。
>>>>>>>>>>>>
>>>>>>>>>>>> よろしくお願いします。
>>>>>>>>>>>>
>>>>>>>>>>>> k.moriwaki さんは書きました:
>>>>>>>>>>>>> 森脇です
>>>>>>>>>>>>>
>>>>>>>>>>>>>> もし「パッケージ名.プロシージャ名」で呼び出せるのであれば、
>>>>>>>>>>>>>> DBFluteがSql2Entityで自動生成するProcedurePmbを参考に
>>>>>>>>>>>>>> 手動でPmbを作って、ProcedureNameにパッケージ名を付与すれば
>>>>>>>>>>>>>> 実行はできるかもしれません。(未検証)
>>>>>>>>>>>>> これは試して見たんですが例外が発生しました。
>>>>>>>>>>>>> で、そもそもS2Dao.NETが対応していない為発生しているのではと思って
>>>>>>>>>>>>> メールした次第です。
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> 以下ログです。
>>>>>>>>>>>>>
>>>>>>>>>>>>> Message: Look! Read the message below.
>>>>>>>>>>>>> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
>>>>>>>>>>>>> The SQL failed to execute!
>>>>>>>>>>>>>
>>>>>>>>>>>>> [Advice]
>>>>>>>>>>>>> Please confirm the Exception message.
>>>>>>>>>>>>>
>>>>>>>>>>>>> [Exception]
>>>>>>>>>>>>> Seasar.Framework.Exceptions.SQLRuntimeException
>>>>>>>>>>>>> [ESSR0071]SQLで例外が発生しました。理由はOracle.DataAccess.Client.OracleException
>>>>>>>>>>>>> ORA-06550: 行1、列15:
>>>>>>>>>>>>> PLS-00306: 'NAME'の呼出しで、引数の数または型が正しくありません。
>>>>>>>>>>>>> ORA-06550: 行1、列7:
>>>>>>>>>>>>> PL/SQL: Statement ignored    場所
>>>>>>>>>>>>> Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32
>>>>>>>>>>>>> errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx*
>>>>>>>>>>>>> pOpoSqlValCtx, Object src, String procedure)
>>>>>>>>>>>>>    場所 Oracle.DataAccess.Client.OracleException.HandleError(Int32
>>>>>>>>>>>>> errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx,
>>>>>>>>>>>>> OpoSqlValCtx* pOpoSqlValCtx, Object src)
>>>>>>>>>>>>>    場所 Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
>>>>>>>>>>>>>    場所 Seasar.Framework.Util.CommandUtil.ExecuteNonQuery(IDataSource
>>>>>>>>>>>>> dataSource, IDbCommand cmd)
>>>>>>>>>>>>>
>>>>>>>>>>>>> [NextException]
>>>>>>>>>>>>> Oracle.DataAccess.Client.OracleException
>>>>>>>>>>>>> ORA-06550: 行1、列15:
>>>>>>>>>>>>> PLS-00306: 'NAME'の呼出しで、引数の数または型が正しくありません。
>>>>>>>>>>>>> ORA-06550: 行1、列7:
>>>>>>>>>>>>> PL/SQL: Statement ignored
>>>>>>>>>>>>>   ErrorCode = 6550
>>>>>>>>>>>>>   HelpLink  =
>>>>>>>>>>>>>
>>>>>>>>>>>>> [Behavior]
>>>>>>>>>>>>> CodeMstBhv.OutsideSql().Call()
>>>>>>>>>>>>>
>>>>>>>>>>>>> [OutsideSqlPath]
>>>>>>>>>>>>> CODE.NAME
>>>>>>>>>>>>>
>>>>>>>>>>>>> [ParameterBean]
>>>>>>>>>>>>> App.DB.ExDao.PmBean.NamePmb
>>>>>>>>>>>>> {,1,0}
>>>>>>>>>>>>>
>>>>>>>>>>>>> [Statement]
>>>>>>>>>>>>> Oracle.DataAccess.Client.OracleCommand
>>>>>>>>>>>>> * * * * * * * * * */
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2008/10/23 17:21 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>>>>> 久保(jflute)です。
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> もし「パッケージ名.プロシージャ名」で呼び出せるのであれば、
>>>>>>>>>>>>>> DBFluteがSql2Entityで自動生成するProcedurePmbを参考に
>>>>>>>>>>>>>> 手動でPmbを作って、ProcedureNameにパッケージ名を付与すれば
>>>>>>>>>>>>>> 実行はできるかもしれません。(未検証)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2008/10/23 kubo <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>>>>>> 久保(jflute)です。
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 取り急ぎ、DBFluteでは意識して対応はしていません。
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ADO.NET(というかOracleのProvider)でどうやって、
>>>>>>>>>>>>>>> 指定して実行できるのかがよくわかっていません。
>>>>>>>>>>>>>>> (InternalProcedureHandlerクラスにてプロシージャを実行しています)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 後は、パッケージ名がメタ情報として取得できるのかどうかも
>>>>>>>>>>>>>>> わかっていません。(というかそもそもアプローチしたことがないです)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> #
>>>>>>>>>>>>>>> # そもそもOracleでパッケージを使ったことがないので、
>>>>>>>>>>>>>>> # 申し訳ありませんが知識不足です。。。
>>>>>>>>>>>>>>> #
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2008/10/23 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>>>>>>>>>>>>> 森脇と申します。
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 件名の通りなのですが、S2Dao.NET、DBFluteともOracleのパッケージには
>>>>>>>>>>>>>>>> 対応されていますでしょうか?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> S2Dao.NET のドキュメントを確認しましたが、Procedure属性の指定が
>>>>>>>>>>>>>>>> ・ストアプロシージャ名
>>>>>>>>>>>>>>>> ・スキーマ名.ストアドプロシージャ名
>>>>>>>>>>>>>>>> しか説明がありませんでしたので対応されていないのでしょうか?
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> seasar-dotnet mailing list
>>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> seasar-dotnet mailing list
>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>
>>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> seasar-dotnet mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>
>>>>
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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