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

k.moriwaki [E-MAIL ADDRESS DELETED]
2008年 10月 30日 (木) 10:50:22 JST


久保さん
森脇です

> ファンクションの用途って、自分の個人的な感覚では
> 「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 メーリングリストの案内