ストアドプロシジャーの使い方を教えてください。
WebObjectsでストアドプロシージャの使い方が分かりません。
できましたら、何かサンプルがありませんでしょうか。
WebObjectsでストアドプロシージャの使い方が分かりません。
できましたら、何かサンプルがありませんでしょうか。
ヘルプの
EOUtilities.executeStoredProcedureNamed()
をご参照ください。OmniGroupのメーリングリストの過去ログで
StoredProcedureと検索すると結構ヒットしますよ。
Oracle8i 8.1.6 に以下の引数を取るストアードプロシージャを
作成しました。
PROCEDURE TEST (
X IN VARCHAR2,
Y OUT VARCHAR2,
Z OUT VARCHAR2) IS ...省略
そして、WebObjects5 から以下のようなソースで呼び出してみたのですがエラーが起きてしまいます。
EOEditingContext ec =
((Session)session()).defaultEditingContext();
NSDictionary args = new NSDictionary("abc","x");
NSDictionary ret =
EOUtilities.executeStoredProcedureNamed(ec,"test",args);
エラー内容:
ORA-06550: 行 1、列 13:
PLS-00306: 'TEST'の呼出しで、引数の数または型が正しくありません。
ORA-06550: 行 1、列 7:
PL/SQL: Statement ignored
ちなみにSQL*Plusからは正常に実行できます。
また、ストアードプロシージャの情報はEOModelerのウィザードで
自動で取得したままです。
何かわかることがありましたらよろしくお願い致します。
それでは、
rowRawSQL をつかって、直接SQLを投げてはどうでしょうか。
SQLにexec文で引数をもったストアドプロシージャを投げることが
できたと思います。
(SQLが少し汚くみえてしまうかもしれませんが)
アドバイスありがとうございます。
EOModelerでプロシージャの情報を見ると
Column項目に最初はデフォルト値でパラメータの順番を
表す数値が入っていたのですが、これを実際のプロシージャの
パラメータ名に変更したら、executeStoredProcedureNamedで
動作しました。
ただ、プロシージャのパラメータの名前で勝手にソートして
しまうらしく、別のパラメータに別の値が入ってしまうなどの
現象が発生してしまいます。
何か解決策があるのでしょうか・・・・。
rawRowsForSQL ではプロシージャに
A OUT VARCHAR2 などとOUT指定のパラメータが宣言されている
場合には変数を渡さないといけないため、実現できませんでした。
また呼び出し時には、 exec procedure_name(...) ではなく
begin procedure_name(...);end; を渡さないとうまく実行されないようです。
ストアドプロシジャーの使い方を教えてください。