複数の in/out パラメータを持つストアド プロシージャを実行しようとしています。これは、SQLServer でこれを行うために期待される方法です。
using (Context)
{
const string xml = "<test><testc>testing</testc></test>";
var userIdParam = new SqlParameter { ParameterName = "I_USER_ID", Value = user.ID };
var dtsParam = new SqlParameter { ParameterName = "I_DTS", Value = DateTime.Now };
var timeoutParam = new SqlParameter { ParameterName = "I_TIMEOUT", Value = DateTime.Now };
var xmlParam = new SqlParameter { ParameterName = "I_XML", Value = xml };
var sessionIdParam = new SqlParameter { ParameterName = "O_SESSION_ID", Value = "", Direction = ParameterDirection.Output };
var result =
Context.Database.SqlQuery<string>(
"DALLEN.SP_INSERT_SESSION I_USER_ID, I_DTS, I_TIMEOUT, I_XML, O_SESSION_ID out",
userIdParam,
dtsParam,
timeoutParam,
xmlParam,
sessionIdParam);
}
残念ながら、これは oracle では機能しません。out パラメーターの代わりに ref カーソルが使用される可能性があることは理解していますが、それは私自身の問題ではありません。dbcontext.database.sqlquery を使用してストアド プロシージャにパラメータを渡す良い方法はありますか?
編集
クエリを実行しようとしたときに受信したエラー メッセージ。sqlParamters を受け入れないことが説明されているため、それらを OracleParamters に変更しましたが、どちらも機能しませんでした。
「タイプ 'System.Data.SqlClient.SqlParameter' のオブジェクトをタイプ 'Oracle.DataAccess.Client.OracleParameter' にキャストできません。」
手順:
CREATE OR REPLACE PROCEDURE DALLEN.SP_INSERT_SESSION (
I_USER_ID IN NUMBER,
I_DTS IN DATE,
I_TIMEOUT IN DATE,
I_XML IN VARCHAR2,
O_SESSION_ID OUT NUMBER
)
AS
BEGIN
SELECT S_SESSION.NEXTVAL
INTO O_SESSION_ID
FROM DUAL;
INSERT INTO DALLEN.SYS_SESSION
(ID, USER_ID, DTS, TIMEOUT, XML)
VALUES (O_SESSION_ID, I_USER_ID, I_DTS, I_TIMEOUT, I_XML);
END;
前もって感謝します!