【问题标题】:Error "ORA-00933: SQL command not properly ended" on Select with ODBC Command使用 ODBC 命令选择时出现错误“ORA-00933:SQL 命令未正确结束”
【发布时间】:2015-10-21 21:42:11
【问题描述】:

我正在尝试使用 .NET 中的 ODBC 对 Oracle DB 执行查询,但出现以下错误:

ORA-00933: SQL command not properly ended

但是,SQL 语句肯定是正确的,我可以从 Oracle SQL Developer 成功执行它。查询本身如下所示:

SELECT * FROM TABLE(SCHEMA.PKG.SPNAME('PARAMS'));

另一个简单的查询工作正常:

SELECT COUNT(*) FROM SCHEMA.MYTABLE

它看起来像前者,它在查询中使用了一个包并导致某些东西中断。该错误表明它没有正确结束,但它有一个分号和正确的大括号,所以似乎发生了其他事情。

如果我删除结尾的分号,我会收到一个没有消息的错误。

我的 C# 代码是基本的,如下所示:

using (var connection = new OdbcConnection(connectionString))
{
    using (var command = connection.CreateCommand())
    {
        command.CommandText = commandText;

        connection.Open();
        var result = command.ExecuteScalar();
        connection.Close();

        Console.WriteLine(result);
    }
}

当使用 .NET 的 Oracle 库时,当我删除结尾的分号时它可以工作。如果我保留它,则会出现关于 SQL 命令未正确结束的相同错误。

这个查询似乎应该与 ODBC 一起使用。我需要做些什么来让它工作,还是使用 Oracle Managed Data Provider 是唯一的方法?

【问题讨论】:

  • 您使用的是什么版本的 OracleDataClient..
  • 这里的情况相同。使用远程 Oracle 11g 数据库,可以在单个查询执行中有分号或多个语句;而对于本地 Oracle 18c 数据库,则不允许...

标签: c# .net oracle odbc data-access


【解决方案1】:

根据我的经验,我注意到分号会中断查询的几个实例,例如 JasperSoft Studio 和 cx_Oracle Python 模块。我对 ODBC 与 OracleDataClient 知之甚少,但我想这是类似的情况。

【讨论】:

    【解决方案2】:

    我不会使用 ODBC 我实际上会使用 OracleDataClient 做类似的事情

    var strSQL = "SELECT * FROM TABLE(SCHEMA.PKG.SPNAME('PARAMS'));";
    using (OracleConnection connStr = new OracleConnection(connectionString))
    {         
        using (OracleCommand cmd = new OracleCommand(strSQL, connStr))
        {
            cmd.CommandType = CommandType.Text;
            cmd.Connection.Open();
            cmd.ExecuteScalar(); //change the ExecuteScalar to fit the proper call
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 2019-08-22
      • 2020-02-29
      相关资源
      最近更新 更多