- PR -

ストアドファンクションへの引数の渡し方

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/09/13
投稿数: 5
投稿日時: 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)

@の設定方法とデータの設定方法が分かりません。
以上、宜しくお願い致します。

99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 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();
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-09-13 23:17
レコードデータの取得には RefCursor を使ったと思いますが、
確か output のみだったような気がします。"参照カーソル" ですからね。

ですから、上の未記入さんがおっしゃられているように、
PL/SQL ブロックでラップするような手順を踏む必要があると思います。
.NET からはそのブロックにIDを渡すなどすることになるでしょう。
未記入
会議室デビュー日: 2006/09/13
投稿数: 5
投稿日時: 2006-09-14 08:51
回答ありがとうございます。
未記入さんの方法でサンプルを参考に試してみたいと思います。
また、何かありましたら宜しくお願い致します。
1

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