簡體   English   中英

如何在Oracle存儲過程中將值從C#傳遞給refcursor參數

[英]How to pass a value from c# to refcursor parameter in oracle stored procedure

您能幫我將C#的值傳遞給refCursor類型嗎? 我嘗試發送dataTable,如下面的鏈接所示,但無法正常工作。 將數據表傳遞給Oracle存儲過程的后代

存儲過程:

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;  

這是該用戶的重復帖子。 請參見將數據表傳遞給Oracle存儲過程的后代

您不能將DataTable綁定到Ref Cursor。 您將需要傳遞另一個ref游標,並且只能將其作為存儲過程/函數的輸出,或者作為對匿名塊中的表的查詢來獲取...也許您可以創建使用不同包裝方法的包裝存儲過程數據類型,例如關聯數組。

http://www.oracle.com/technetwork/issue-archive/2006/06-jan/o16odpnet-087852.html

使用OracleCommand i OracleParameter類。 注意OracleParameter的ParameterDirection屬性。

這是我代碼中的示例,我正在調用web_shop_interface.kreiraj_mp_racun存儲過程,並為其設置參數:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM