【问题标题】:SqlQuery returning ora-00911 invalid character although the query generated runs well in Oracle database尽管生成的查询在 Oracle 数据库中运行良好,但 SqlQuery 返回 ora-00911 无效字符
【发布时间】:2023-03-15 17:01:01
【问题描述】:

我正在尝试从 oracle 数据库 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';

【问题讨论】:

  • 您能否也发布完整的查询,就像传递给服务器时一样?
  • query 的确切值是多少?
  • 检查ORA-00911 的其他答案很可能您应该从 query 字符串中删除尾随分号 (...+ sequenceId + "';")。是的,从 IDE 运行查询 使用分号 很好;)

标签: c# oracle linq entity-framework-6


【解决方案1】:

@Marmite Bomber 正中目标。从来没有想过这可能是问题所在。 我在删除“;”后执行了查询。它工作得很好。

var query = "SELECT NVL(MAX(" + column + ") + 1, 1) AS " + column + " FROM " + table + " WHERE " + sequenceIdField + " = '" + sequenceId + "'";

【讨论】:

  • SQL 没有分号。客户端工具将其用作分隔符,但不会发送到数据库。
猜你喜欢
  • 2020-11-10
  • 2017-06-10
  • 2014-09-20
  • 2023-03-20
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
相关资源
最近更新 更多