У меня есть хранимая процедура Oracle, которую я пытаюсь вызвать с помощью EF code-first (DbContext
) с использованием драйверов DevArt Oracle (последняя версия). Я не знаю, почему это так сложно (я хотел бы использовать SQL Server), но я не могу заставить его работать. Я делаю то, что описано в this postВызов хранимой процедуры Oracle с использованием кода Entity Framework и драйверов DevArt
Я последовал ответ, который поставляется в DevArt самих командами, и я все еще получаю исключение Oracle, хотя и несколько иначе:
ор-01036 незаконного имя переменного/номер
Вот подпись моей хранимой процедуры:
create or replace PROCEDURE GP_PARTICIPANTDETAILS
(
p_contracts_list VARCHAR2,
p_participant_type CHAR DEFAULT NULL,
p_dob_range_begin DATE DEFAULT NULL,
p_dob_range_end DATE DEFAULT NULL,
p_part_name VARCHAR DEFAULT NULL,
p_ssn VARCHAR DEFAULT NULL,
p_status_list VARCHAR2 DEFAULT NULL,
p_start_index IN INT DEFAULT 0,
p_records_to_take IN INT DEFAULT 0,
cp_result OUT SYS_REFCURSOR
)
Я создаю все м у параметров, как это (не будет беспокоить, чтобы положить их все здесь, потому что есть так много, но я определяю имя, значение, тип и направление для всех)
OracleParameter paramContracts = new OracleParameter("p_contracts_list", OracleDbType.VarChar, contracts.ToString(), System.Data.ParameterDirection.Input);
Параметр курсора определяется следующим образом:
OracleParameter paramOutputCursor = new OracleParameter("cp_cresult", OracleDbType.Cursor, System.Data.ParameterDirection.Output);
Тогда я называю это так:
string sqlQuery = "BEGIN OMNIDB.GP_PARTICIPANTDETAILS(:p_contracts_list, :p_participant_type, :p_dob_range_begin, :p_dob_range_end, :p_part_name, :p_ssn, :p_status_list, :p_start_index, :p_records_to_take, :cp_result); END;";
var details = context.Database.SqlQuery<ParticipantDetail>(sqlQuery, paramContracts, paramPartType, paramDobBegin, paramDobEnd, paramPartName, paramSSN, paramStatuses, paramStartIndex, paramRecordsToTake, paramOutputCursor).ToList();
Все стараюсь дает ту же ошибку. С :
перед именем параметра, без :
... Я проверил, что написание параметров в коде соответствует объявлению процедуры.
Что здесь не так?
Исправьте имя параметра в коде: cp_cresult -> cp_result. Это должно решить проблему. – Devart