@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

.NETからストアドプロシージャの引数設定方法

投稿者投稿内容
未記入
会議室デビュー日: 2004/08/22
投稿数: 7
投稿日時: 2004-08-22 12:52
初めて間もないので、意味が通じるか心配ですが
宜しく回答お願いします。
できれば、以下のサンプルに追加記述してもらうと助かります。


オラクルサーバー(oracle9i)内に以下のストアドを置き
------------------------------------
CREATE OR REPLACE PROCEDURE "テスト"
(aaa in number,ppp in out varchar2)
is
ppp:='OK';
end;
-----------------------------------
.NETからバインド変数として渡して戻り値を取得したいのですが
どの様に記述すれば宜しいか教えて下さい!
(:pv部分です。)
PVの値(バインド変数)をストアドに渡して
.NET
で値を参照する方法です。
--------------------------------------------
Dim CN As New OracleClient.OracleConnection
Dim CMD As New OracleClient.OracleCommand
Dim Data_Read As New OracleClient.OracleDataAdapter

CN.ConnectionString="user id=○○○;Data source=○○○;Password=○○○"
CMD.Connection=CN
CMD.CommandType = CommandType.StoredProcedure

    ↓ここから下の記述でうまくいきません
実例を記述してもらえると助かります。
PVの値を9で入れて、戻り参照でOKと表示したいのですが・・・

CMD.CommandText = "テスト(0,:pv)"

Data_Read = CMD.ExecuteReader
Data_Read.Close()
msgbox(pv)

未記入
ベテラン
会議室デビュー日: 2002/09/10
投稿数: 68
投稿日時: 2004-08-23 09:32
クイックスタートチュートリアルのこのへんを読んで頑張ってみてください。

http://ja.gotdotnet.com/quickstart/howto/doc/adoplus/ExecuteCommand.aspx
http://ja.gotdotnet.com/quickstart/howto/doc/adoplus/OutParams.aspx


[ メッセージ編集済み 編集者: 未記入 編集日時 2004-08-23 09:43 ]
未記入
会議室デビュー日: 2004/08/22
投稿数: 7
投稿日時: 2004-08-23 14:58
文献を参考に以下のように記述しましたが
下記の内容のエラーが帰ってきます!
ORA06550:行1,列17
PLS-00801:内部エラー[22503]
ORA06550:行1,列17
PL/SQL:Statement ignored

誰か知恵を貸してください!

.NET記述文

Dim PV As New OracleClient.OracleParameter
PV.OracleType = OracleClient.OracleType.VarChar
PV.Size = 10
PV.Direction = ParameterDirection.InputOutput

Dim PLsql As String = "zzz_in(0,v)"
CMD.Parameters.Add("PV", PV.OracleType.VarChar, 10).Value = "99"

CMD.CommandType = CommandType.StoredProcedure
CMD.CommandText = PLsql

CMD.ExecuteReader()
未記入
会議室デビュー日: 2004/08/22
投稿数: 7
投稿日時: 2004-08-23 14:58
文献を参考に以下のように記述しましたが
下記の内容のエラーが帰ってきます!
ORA06550:行1,列17
PLS-00801:内部エラー[22503]
ORA06550:行1,列17
PL/SQL:Statement ignored

誰か知恵を貸してください!

.NET記述文

Dim PV As New OracleClient.OracleParameter
PV.OracleType = OracleClient.OracleType.VarChar
PV.Size = 10
PV.Direction = ParameterDirection.InputOutput

Dim PLsql As String = "zzz_in(0,:pv)"
CMD.Parameters.Add("PV", PV.OracleType.VarChar, 10).Value = "99"

CMD.CommandType = CommandType.StoredProcedure
CMD.CommandText = PLsql

CMD.ExecuteReader()
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-08-23 15:29
こんにちは。

エラー内容からは、ストアド側(PL/SQL)に問題があるよ、ということだと
思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-23 16:17
引用:

未記入さんの書き込み (2004-08-23 14:58) より:

PLS-00801:内部エラー[22503]



 Oracleエラーメッセージによると、「Oracle社に連絡してください」となっていますが、コンパイルエラーが出ているものをそのまま実行しようとしていると思われます。


 何をするにしても、メッセージの正確な意味を知ることは、一番最初にするべきことです。
未記入
会議室デビュー日: 2004/08/22
投稿数: 7
投稿日時: 2004-08-23 16:22
SQL*PLUSにて以下のようにして行ったら答えが返ってきましたが???
これを.NETには帰ってこないんでしょうか??
(環境:Oracle9i + .NET)

SQL> variable pv varchar2(10)
SQL> begin
2 :pv:='NG'
3テスト(0,:pv);
4 end;
5 /

PL/SQLプロシージャが正常に完了しました。

SQL> print pv

PV
--------------------------------
OK
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-08-23 16:39
こんにちは。

最初の投稿で提示されていたストアドの内容のうち、以下の修正をしてみると
どうなりますか?

CREATE OR REPLACE PROCEDURE "テスト"

CREATE OR REPLACE PROCEDURE TEST
にする
(""を外す、プロシージャ名を半角にする)

スキルアップ/キャリアアップ(JOB@IT)