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

kubo [E-MAIL ADDRESS DELETED]
2008年 10月 29日 (水) 23:48:58 JST


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