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

kubo [E-MAIL ADDRESS DELETED]
2008年 10月 23日 (木) 19:54:24 JST


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