Я написал код в 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();

Подскажите, пожалуйста, как заставить его работать.

1
Rajiv Choudhary 31 Дек 2015 в 11:04

2 ответа

Лучший ответ

Вы создаете / добавляете только один параметр, но назначаете его дважды с разными значениями, в результате чего вызывается только один параметр.

Вместо этого создайте и добавьте два отдельных параметра, например:

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);
1
Joachim Isaksson 31 Дек 2015 в 08:14

Вероятно, это потому, что вы не указали 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";
...

Хотя было бы лучше объявить другую переменную для первого параметра, если вы будете читать с этого рефчестрора позже.

0
Timekiller 31 Дек 2015 в 08:14