В настоящее время я использую Fluent NHibernate ORM и пытаюсь вызвать функцию oracle fu_GetUserGrant
. Я попытался код ниже:Fluent NHibernate Oracle function
var dbCommand = session.Connection.CreateCommand();
dbCommand.CommandText = "select fu_GetUserGrant(@grantId) from dual;";
dbCommand.CommandType = CommandType.Text;
var param = dbCommand.CreateParameter();
{
param.Value = grantId;
param.DbType = DbType.StringFixedLength;
param.Size = 200;
param.ParameterName = "@grantId";
}
dbCommand.Parameters.Add(param);
var result = dbCommand.ExecuteNonQuery();
return long.Parse(result.ToString());
И получать исключение - Oracle.ManagedDataAccess.Client.OracleException : ORA-00936: missing expression
После нескольких часов неудачи я попробовал другой подход:
var c = session.
CreateQuery("select fu_GetUserGrant(:grantId) from dual;")
.SetParameter("grantId", grantId).UniqueResult<int>();
и получить исключение - NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : dual is not mapped [select fu_GetUserGrant(:grantId) from dual;]
любой идеи парней? Когда я получаю одну и ту же функцию из MSSQL, она отлично работает (конечно, я использую другой SQL-запрос из-за MSSQL.)
Ели из всех, спасибо за помощь. Я попробовал заменить '@' на «:» и получил такое же исключение - «Oracle.ManagedDataAccess.Client.OracleException: ORA-00936: missing expression». Затем я попробовал только значение hardcode в commandText - 'dbCommand.CommandText =" выбрать fu_GetUserGrant ('*') из двойного; ", но такое же исключение появилось. – Tadziokaz
Извините, что это был только первый снимок, я не использую такие вызовы в моем сопоставлении NHibernate, вместо этого я регистрирую свои функции в пользовательском 'Dialect' через' RegisterFunction', чтобы избежать прямого использования Oracle и абстрактных вызовов функций sql. – tykovec