SqlQuery возвращает недопустимый символ ora-00911, хотя сгенерированный запрос хорошо работает в базе данных Oracle - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь получить следующий порядковый номер из базы данных оракула 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';

1 Ответ

1 голос
/ 07 июня 2019

@ Marmite Bomber был ударом по цели.Никогда даже не мечтал, что это может быть проблемой.Я выполнил запрос после удаления «;».Это сработало отлично.

var query = "SELECT NVL(MAX(" + column + ") + 1, 1) AS " + column + " FROM " + table + " WHERE " + sequenceIdField + " = '" + sequenceId + "'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...