Я пытаюсь получить следующий порядковый номер из базы данных оракула 11g. Я использовал разные методы, чтобы получить данные из базы данных, они по-прежнему говорят недопустимый символ. тот же самый сгенерированный запрос хорошо работает в базе данных Oracle.
Первичный ключ (sequenceId, sequenceNumber). Для каждого sequenceId будет отдельный счетчик. Я использую универсальный тип TEntity, который будет передан контролером.
public virtual async Task<BaseResult<int>> GetNextSequenceAsync(string sequenceId)
{
var sequenceIdField = typeof(SequenceIdDatabaseFields).GetField(typeof(TEntity).Name).GetValue(null);
var table = typeof(SequenceDatabaseTable).GetField(typeof(TEntity).Name).GetValue(null);
var column = typeof(SequenceDatabaseColumn).GetField(typeof(TEntity).Name).GetValue(null);
//var query = new OracleCommand("SELECT NVL(MAX(" + column + ") + 1, 1) AS "+ column+" FROM "+ table+" WHERE "+ sequenceIdField+" = '"+ sequenceId + "';");
var query = "SELECT NVL(MAX(" + column + ") + 1, 1) AS " + column + " FROM " + table + " WHERE " + sequenceIdField + " = '" + sequenceId + "';";
//var nextValue = int.Parse(query.ExecuteScalar().ToString());
var nextValue = await _context.Database.SqlQuery<int>(query).FirstAsync().ConfigureAwait(false);
return GetBaseResult(nextValue, ResultTypes.Ok);
}
Запрос оценивается как
SELECT NVL(MAX(CMNT_SEQ_NBR) + 1, 1) AS CMNT_SEQ_NBR FROM CASE_CMNT WHERE CASE_NBR = '00100283000807215100';