【发布时间】: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