【问题标题】:Oracle ORA-00933: SQL command not properly endedOracle ORA-00933: SQL 命令未正确结束
【发布时间】:2018-08-30 18:43:42
【问题描述】:

我尝试使用 golang 并从 Oracle 查询数据。我的 SQL 查询是:

SELECT * FROM TABLE1 OFFSET 10 ROWS;

但它给出了一个错误:

EXTRA *errors.withStack=dpiStmt_execute: ORA-00933: SQL command not properly ended

当我在 SQL*Plus 中查询时,我的 SQL 查询工作正常,但在我使用 golang 时出错。

【问题讨论】:

  • Oracle 12c 中引入了该语法。那么也许 Golang 使用的是旧的 Oracle 客户端?恐怕我对 Golang 一无所知,因此无法进一步帮助您,但幸运的是,这可能足以为您诊断 Golang 配置提供线索。
  • 不熟悉该客户端,但您是否可能只需要删除分号?
  • 尝试删除;

标签: oracle go


【解决方案1】:

正如 Alex Poole 指出的那样,我会尝试不使用终止分号来运行查询。如果您尝试执行以分号结尾的查询(这在 SQL/Plus 中完全合法),许多 Oracle 客户端库(即 python 中的 cx_Oracle、ADO.NET Oracle 库)会抱怨

【讨论】:

    【解决方案2】:

    如果未指定偏移量,则假定它为 0(零)。因此,删除该子句(因为它在您的情况下什么都不做),即

    select * from table1
    

    并在 golang 中使用该查询。

    【讨论】:

    • 想象偏移不为零。 OP 的实际问题是在 SQL*Plus 中运行的语句不在 golang 中运行。所以这就是他们需要帮助来解决的问题。
    • 我的建议是正确的,在 OP 的问题@APC 下,您的推荐正轨 - 他使用的 golang 无法识别 12c 语法。如果 offset 不为零(嗯,if ... 但它 is 为零),那么省略该子句可能有助于运行查询。
    【解决方案3】:

    我很确定你的结束分号太多了。分号是分隔多个 SQL 语句或关闭 pl/sql 块的字符。所以当你把它写在 SQL 语句的末尾时,解析器不知道如何处理它,因为他只等待一条 SQL 语句。

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2010-11-22
      相关资源
      最近更新 更多