2014-12-02 197 views
0

您能否幫助我將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; 
+0

[通行證數據表到Oracle存儲過程的REFCURSOR]的可能重複(http://stackoverflow.com/questions/27249670/pass-datatable-to-refcursor-of-oracle-stored-procedure) – 2014-12-03 19:20:26

回答

-1

使用OracleCommandOracleParameter類。注意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(); 
+0

在存儲過程中,沒有類型爲RefCursor的輸入參數。我的存儲過程具有RefCursor類型的輸入參數。我的問題是如何向C#代碼中的RefCursor參數發送值。 – 2014-12-03 04:59:41

+0

請參閱OracleParameter文檔,您必須將OracleDbType參數設置爲OracleDbType.RefCursor。 – 2014-12-03 12:56:02

相關問題