簡體   English   中英

Oracle存儲過程無法從ASP.NET調用

[英]Oracle Stored Procedure unable to call from ASP.NET

我已經在ASP.NET中編寫了一個代碼來從Oracle存儲過程中獲取數據。 但是嘗試獲取數據時出現錯誤:

ORA-06550:第1行,第7列:PLS-00306:調用“ USER_FEEDBACK”時參數的數量或類型錯誤ORA-06550:第1行,第7列:PL / SQL:語句被忽略

程序代碼是這樣的:

create or replace PROCEDURE user_feedback(cv_results out sys_refcursor,start_date IN VARCHAR2)
IS
BEGIN
 open cv_results for
select pi.first_name || ' ' || pi.last_name initiator
 ......
from request_workflow w inner join request_workflow_attribute waRating
on waRating.request_workflow_id = w.row_id
and waRating.attr_name = 'UserRating'
.............
where w.date_stamp_utc between start_date and '31-dec-2015'
order by waRating.attr_value desc, eform_name;
END ;

這是我的ASP.NET代碼:

Oracle.DataAccess.Client.OracleCommand objCmd = new Oracle.DataAccess.Client.OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "user_feedback";
objCmd.CommandType = CommandType.StoredProcedure;

Oracle.DataAccess.Client.OracleParameter oraP = new Oracle.DataAccess.Client.OracleParameter();

//   System.Data.OracleClient.OracleParameter op = null; 
oraP.OracleDbType = OracleDbType.RefCursor;
oraP.ParameterName = "cv_results";
oraP.Direction = System.Data.ParameterDirection.Output;

oraP.ParameterName = "start_date";
oraP.OracleDbType = OracleDbType.Varchar2;

oraP.Value = "01-Dec-2015";
oraP.Direction = System.Data.ParameterDirection.Input;
objCmd.Parameters.Add(oraP);

objConn.Open();
objCmd.ExecuteReader();
objCmd.ExecuteNonQuery();

請提出如何使其工作的建議。

您僅創建/添加一個參數,但是兩次將其分配不同的值,從而導致僅一個參數出現在調用中。

相反,創建並添加兩個單獨的參數,例如:

var oraP1 = new Oracle.DataAccess.Client.OracleParameter();

oraP1.OracleDbType = OracleDbType.RefCursor;
oraP1.ParameterName = "cv_results";
oraP1.Direction = System.Data.ParameterDirection.Output;

objCmd.Parameters.Add(oraP1);

var oraP2 = new Oracle.DataAccess.Client.OracleParameter();

oraP2.ParameterName = "start_date";
oraP2.OracleDbType = OracleDbType.Varchar2;
oraP2.Value = "01-Dec-2015";
oraP2.Direction = System.Data.ParameterDirection.Input;

objCmd.Parameters.Add(oraP2);

可能是因為您沒有Add第一個參數。 嘗試這樣的事情?

...
oraP.ParameterName = "cv_results";
oraP.Direction = System.Data.ParameterDirection.Output;
objCmd.Parameters.Add(oraP);

oraP = new Oracle.DataAccess.Client.OracleParameter();
oraP.ParameterName = "start_date";
...

不過,最好是在第一個參數中聲明另一個變量,如果您以后要從該refcursor中讀取該變量。

暫無
暫無

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

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