- - PR -
ストアドファンクションへの引数の渡し方
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-09-13 22:03
VB.NET 2003(ODP)でOracle V10.2で作成したストアドファンクションを起動したいのですが、引数がレコードの場合どのように設定して良いのか分かりません。
複数のレコードを取得する事は出来ました。 提供されたファンクションは以下の通りです。 /* ---------------------------------------------*/ /* 名前:AddMaster */ /* 引数:追加レコード */ /* 戻値:OK:追加したShipSeqNum/NG:-1 */ /* 処理:マスタに1件追加 */ /* ---------------------------------------------*/ FUNCTION AddMaster(inRec IN ViewShips%rowtype) RETURN NUMBER IS numRet NUMBER := 0; BEGIN numRet := funcNumbering('aaa'); INSERT INTO ViewShips VALUES( numRet, inRec.ShipCode, inRec.ShipName, inRec.UnitName, inRec.ClassName, inRec.PhoneNum, inRec.FigureName, inRec.GroupNum, inRec.MaxPwr, inRec.ErrColr, inRec.Memo) RETURNING SeqNum INTO numRet ; COMMIT; RETURN numRet; EXCEPTION WHEN OTHERS THEN ROLLBACK; RETURN -1; END AddMaster; VB側のソースは 'パッケージファンクションの起動方法() Dim cmd As OracleCommand = New OracleCommand(sql, con) cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "TESTPACK.AddMaster" cmd.BindByName = True Dim paral0 As OracleParameter = cmd.Parameters.Add("inRec", OracleDbType.Varchar2, ParameterDirection.Input) @ Dim paral1 As OracleParameter = cmd.Parameters.Add("numRet", OracleDbType.Int32, ParameterDirection.ReturnValue) @の設定方法とデータの設定方法が分かりません。 以上、宜しくお願い致します。 |
|
投稿日時: 2006-09-13 23:13
OracleDbType ROWTYPE で検索してみました
http://forums.oracle.com/forums/thread.jspa?threadID=329643 に方法があります %ROWTYPEに対応するTYPEはないようです。かわりに sqlplusからプロシージャをコールするイメージでコーディングします コマンドsbSQL (実際は1行の文字列として作成します) declere in_rec TABLE%ROWTYPE; ret number; begin ---- in_rec にデータ設定 --- ストアドコール :ret := FUNCTION(in_rec); end; OracleParameter outパラメータ定義 cmd.CommandText = sbSQL.ToString(); cmd.Parameters.Add(ret); cmd.ExecuteNonQuery(); |
|
投稿日時: 2006-09-13 23:17
レコードデータの取得には RefCursor を使ったと思いますが、
確か output のみだったような気がします。"参照カーソル" ですからね。 ですから、上の未記入さんがおっしゃられているように、 PL/SQL ブロックでラップするような手順を踏む必要があると思います。 .NET からはそのブロックにIDを渡すなどすることになるでしょう。 |
|
投稿日時: 2006-09-14 08:51
回答ありがとうございます。
未記入さんの方法でサンプルを参考に試してみたいと思います。 また、何かありましたら宜しくお願い致します。 |
1