0

У меня есть хранимая процедура 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();  

Все стараюсь дает ту же ошибку. С : перед именем параметра, без : ... Я проверил, что написание параметров в коде соответствует объявлению процедуры.

Что здесь не так?

ответ

0

Мы воспроизвели проблему и расследуем ее. Мы сообщим вам о результатах. Если у вас есть вопросы о продуктах Devart, свяжитесь с нами через http://www.devart.com/company/contactform.html.

+0

Исправьте имя параметра в коде: cp_cresult -> cp_result. Это должно решить проблему. – Devart