我有一个Oracle存储过程,我尝试使用DevArt Oracle驱动程序(最新版本)以EF代码优先(DbContext
)调用。我不知道为什么这么难(我希望我使用的是SQL Server),但我不能让它工作。我正在做this post
我按照DevArt团队自己提供的答案,我仍然得到了一个Oracle异常,虽然略有不同:
ora-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);
cursor参数的定义如下:
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();
我尝试的一切都给出了同样的错误。使用参数名称之前的:
,没有:
...我验证了代码中params的拼写与过程的声明匹配。
这里有什么问题?
答案 0 :(得分:0)
我们已经复制了这个问题并正在对其进行调查。我们会通知您结果。如果您对Devart产品有任何疑问,请通过http://www.devart.com/company/contactform.html与我们联系。