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

kubo [E-MAIL ADDRESS DELETED]
2008年 10月 23日 (木) 20:38:31 JST


久保(jflute)です。

簡単ではありますが、パッケージ付きプロシージャを作って、
dbflute-oracle-example並びにdbflute-noracle-exampleで試しました。
結論から言うと、実行できました。

引数もINとOUTとINOUT3つ存在するプロシージャを作って、
OUTで値を受け取りれることも確認しています。

ということで、以前のDBFluteから比べると
ProcedurePmbのProcedureNameにパッケージ名を
付与することで実行ができるようになったということになります。

ということで、

dbflute-noracle-exampleで確認しているプロシージャを
そちらの環境で一時的に作成して試して頂けないでしょうか?
結果次第で大分切り分けができるかと思います。
来週ご確認お願いします。

#
# とりあえず、Exampleで想定どおりできているので、
# 予定通り今週リリースします。
# 来週新たな事象が見つければその次のバージョンで
# 対応するようにします。
#

2008/10/23 kubo <[E-MAIL ADDRESS DELETED]>:
> 久保(jflute)です。
>
>> ちなみにPmbは作られていました。
>> 以下のようなパッケージ構成だった場合、CodePmbが作成され
>> returnのフィールドが3つ作成されるといった具合になってました。
>
> ありがとうございます。この情報がとてもありがたいです。
> そして、こちらでもほぼリアルタイムで試してて、
> 同一スキーマのパッケージのプロシージャであれば、
> メタ情報が取得できました。
> 同じところまで再現できれば検証はできるので、
> 確認してみますね。
> (同じエラーであれば、やはりADO.NETの使い方だし、
>  正常に動作できればPL/SQLの文法かもだし)
>
> # 途中経過は随時メール出します。
>
> 2008/10/23 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>> 森脇です
>>
>>> 該当のPL/SQLは、SQL*Plus等から実行可能ですか?
>> すいません、これは試していませんでした。
>> 明日…と言いたいところですが試せるのは月曜以降になりそうです。
>>
>>> また、手動で作成したPmbのパラメータの定義(数とか)は
>>> 合っていますでしょうか?
>> dbflute-noracle-exampleを参考にして、自動生成されたソースを修正したので
>> 合っているとおもいます。
>>
>>
>> 以下余談です。
>>
>> ちなみにPmbは作られていました。
>> 以下のようなパッケージ構成だった場合、CodePmbが作成され
>> returnのフィールドが3つ作成されるといった具合になってました。
>>
>> package Pref
>>   function Code
>>   function Name
>>
>> package City
>>   function Code
>>   function Name
>>
>> package Town
>>   function Code
>>   function Name
>>
>> ----- BsCodePmb.cs -----
>> (略)
>>        // ===============================================================================
>>        //
>>         Definition
>>        //
>>         ==========
>>        // -------------------------------------------------
>>        //                               Procedure Parameter
>>        //                               -------------------
>>         public static readonly String arg1_PROCEDURE_PARAMETER =
>> "arg1, return";
>>         public static readonly String arg2_PROCEDURE_PARAMETER =
>> "arg2, return";
>>         public static readonly String arg3_PROCEDURE_PARAMETER =
>> "arg3, return";
>> (略)
>>
>> 2008/10/23 19:15 kubo <[E-MAIL ADDRESS DELETED]>:
>>> 久保(jflute)です。
>>>
>>>> [ESSR0071]SQLで例外が発生しました。理由はOracle.DataAccess.Client.OracleException
>>>> ORA-06550: 行1、列15:
>>>> PLS-00306: 'NAME'の呼出しで、引数の数または型が正しくありません。
>>>> ORA-06550: 行1、列7:
>>>
>>> PL/SQLまでは到達してるような気もします。
>>>
>>> 該当のPL/SQLは、SQL*Plus等から実行可能ですか?
>>> また、手動で作成したPmbのパラメータの定義(数とか)は
>>> 合っていますでしょうか?
>>>
>>> #
>>> # ちなみにパッケージ付きプロシージャのメタ情報自体が
>>> # 取得できてない(Pmbが作られない)のであれば、
>>> # パッケージ名を付与する以前の問題でしたね。。。
>>> #
>>>
>>> 2008/10/23 kubo <[E-MAIL ADDRESS DELETED]>:
>>>> 久保(jflute)です。
>>>>
>>>> 森脇さん、
>>>> すいませんエラーはちょっと後で見させて頂きます。
>>>> (S2Dao.NETのプロシージャ作者の投稿を待つしか.....)
>>>>
>>>> ちょっと仕様の相談です。
>>>>
>>>> ご教授頂いた方法でプロシージャのパッケージを取得するようにしました。
>>>> メタ情報からパッケージ名が取得できたら、
>>>> SQL上のプロシージャ名を「パッケージ名.プロシージャ名」に
>>>> した方がよいでしょうか?(Java/C#両方)
>>>> (よくわからないならわからないでOKです)
>>>>
>>>> #
>>>> # Oracle限定にするかは要検討。。。
>>>> #
>>>>
>>>> 2008/10/23 k. moriwaki <[E-MAIL ADDRESS DELETED]>:
>>>>> 森脇です
>>>>>
>>>>>> もし「パッケージ名.プロシージャ名」で呼び出せるのであれば、
>>>>>> 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 メーリングリストの案内