ORA 00911带有Where子句的SQL语句以分号结尾时出错

本文关键字:结尾 出错 语句 SQL 带有 00911 Where 子句 ORA | 更新日期: 2023-09-27 18:26:42

我收到一个oracle 00911错误(非法字符)。我希望有人能帮我理解。

我正在使用以下代码在我的oracle11g数据库上执行sql语句:

private DataTable ExecuteQuery(DbCommand query) {
    DataTable result = new DataTable();
    using (DbConnection con = CreateConnection()) {
    try {
       query.Connection = con;
       query.CommandTimeout = int.MaxValue; // don't impose a timeout
       using (DbDataAdapter dataAdapter = factory.CreateDataAdapter()) {
           dataAdapter.SelectCommand = query;
           dataAdapter.Fill(result);
       }
    }
    ...

如果我给这个函数一个DbCommand.CommandText属性的东西,比如"Select * from X;",它可以很好地工作,但如果给"Select * from x where y;",它将抛出一个oracle 00911异常。但是,如果我删除分号,它执行得很好。

有人知道为什么只在某些类型的语句上用分号结束语句会引发非法字符错误吗?

清晰更新:

我用来测试导致错误的分号的确切查询是:

此查询运行良好:SELECT * FROM Machines;

此查询生成了一个ORA 0911错误:SELECT * FROM Machines WHERE ID = 47;

虽然此查询运行良好:SELECT * FROM Machines WHERE ID = 47<--只有分号改变了

此外,正在使用的提供程序是Oracle.DataAccess.Client

ORA 00911带有Where子句的SQL语句以分号结尾时出错

这种行为取决于所使用的DB提供程序-一些提供程序预先执行额外的查询(如SELECT COUNT(*)...)和/或向查询添加一些内容(例如ROWID)。。。根据提供者如何实现这种"内部行为",当分号出现时,可能会导致一些奇怪的事情。。。它甚至可能根据CCD_ 10是否存在而表现不同。。。

在像您这样的场景中(纯SELECT/UPDATE/DELETE语句),我从未在末尾添加分号,也从未遇到过这个问题。。。

出于好奇:为什么结尾有分号?