如何将值从C#传递给oracle存储过程中的refcursor参数
您能否帮助我将C#中的值传递给refCursor类型。我试图发送dataTable,如下面的链接所示,但它不起作用。 Pass datatable to refcursor of Oracle stored procedure如何将值从C#传递给oracle存储过程中的refcursor参数
存储过程:
PROCEDURE PROC_INS( P_USERID IN VARCHAR2,
P_ATTACH_LIST IN SYS_REFCURSOR,
P_out OUT NUMBER,
P_msg OUT VARCHAR2) AS
V_BRS_USERID VARCHAR2(50);
V_ATTACHMENT_TYPE_ID BRS_USER_ATTACHMENT.ATTACHMENT_TYPE_ID%TYPE;
V_FILE_NAME BRS_USER_ATTACHMENT.FILE_NAME%TYPE;
V_FILE_SIZE BRS_USER_ATTACHMENT.FILE_SIZE%TYPE;
V_FILE_DESCR BRS_USER_ATTACHMENT.FILE_DESCR%TYPE;
BEGIN
LOOP
FETCH P_ATTACH_LIST INTO V_BRS_USERID, V_ATTACHMENT_TYPE_ID,V_FILE_NAME, V_FILE_SIZE, V_FILE_DESCR;
EXIT WHEN P_ATTACH_LIST%NOTFOUND;
INSERT INTO USER_ATTACHMENT VALUES
(SEQ_RER_EMP_REP_ID.NEXTVAL,
V_BRS_USERID,
V_ATTACHMENT_TYPE_ID,
V_FILE_NAME,
V_FILE_SIZE,
V_FILE_DESCR,
NULL,
NULL,
0,
0,
'A',
P_USERID,
SYSDATE,
NULL,
NULL
);
END LOOP;
CLOSE P_ATTACH_LIST;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK; -- Transaction mgmt
p_out := 2;
p_msg := sqlerrm;
END PROC_REG_INS_ATTACH;
使用OracleCommand我OracleParameter类。注意OracleParameter的ParameterDirection属性。
这里是从我的代码示例中,我打电话web_shop_interface.kreiraj_mp_racun
存储过程,并为它设置PARAMS:
var fnRac = new OracleCommand();
fnRac.Connection = conn;
fnRac.CommandText = "web_shop_interface.kreiraj_mp_racun";
fnRac.CommandType = CommandType.StoredProcedure;
var ret = new OracleParameter("ret", OracleDbType.Varchar2);
ret.Direction = ParameterDirection.ReturnValue;
ret.Size = 4096;
fnRac.Parameters.Add(ret);
var p1 = new OracleParameter("did", OracleDbType.Decimal);
p1.Value = 15m;
p1.Direction = ParameterDirection.Input;
fnRac.Parameters.Add(p1);
var p2 = new OracleParameter("prn", OracleDbType.Varchar2);
p2.Value = "Invoice 15";
p2.Direction = ParameterDirection.Input;
fnRac.Parameters.Add(p2);
fnRac.ExecuteNonQuery();
在存储过程中,没有类型为RefCursor的输入参数。我的存储过程具有RefCursor类型的输入参数。我的问题是如何向C#代码中的RefCursor参数发送值。 – 2014-12-03 04:59:41
请参阅OracleParameter文档,您必须将OracleDbType参数设置为OracleDbType.RefCursor。 – 2014-12-03 12:56:02
这是一个重复后该用户。请参阅Pass datatable to refcursor of Oracle stored procedure
您无法将DataTable绑定到Ref游标。您需要传递另一个引用游标,并且只能将其作为存储过程/函数的输出或对匿名块中的表进行查询......也许您可以创建一个使用不同的包装器存储过程数据类型,如关联数组。
http://www.oracle.com/technetwork/issue-archive/2006/06-jan/o16odpnet-087852.html
[通行证数据表到Oracle存储过程的REFCURSOR]的可能重复(http://stackoverflow.com/questions/27249670/pass-datatable-to-refcursor-of-oracle-stored-procedure) – 2014-12-03 19:20:26