【问题标题】:missing SELECT keyword error from INSERT statementINSERT 语句中缺少 SELECT 关键字错误
【发布时间】:2025-12-30 12:10:10
【问题描述】:

好的,我有这个命令:

INSERT INTO PHOTOS_HEADER (TC_CLOCK, DC_SCANDATE, TC_PO, DC_DATE, NC_PACKAGES) 
VALUES (:TC_CLOCK, TO_DATE(:DC_SCANDATE, :DATE_FORMAT), :TC_PO, TO_DATE(:DC_DATE, :DATE_FORMAT), :NC_PACKAGES)  
RETURNING NC_AUTOID into :OUTPUT

我通过OracleCommand 对象在.NET 中运行它,它在我们的本地11g 服务器上运行find。当相同的代码在客户端站点上运行时,我们会收到以下错误:

ORA-00928:缺少 SELECT 关键字

可能是返回语句吗?会不会是to_date?我正在努力找出客户端使用的 Oracle 服务器版本,但同时有什么建议吗?

编辑:客户端正在运行 Oracle 11,和我们一样。删除了返回到子句,但仍然收到相同的错误。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    有人在评论中问我,如果您需要使用某个版本的 Oracle 而不返回,该怎么办。我认为这与关于是否存在回归的答案的精神足以放在自己的答案中。 一种方法是使用序列中的 nextval 函数并在插入之前获取 ID。

    select sequence.nextval into :id from dual;
    

    然后执行插入。 有关更多示例,请参阅http://www.dba-oracle.com/t_oracle_nextval_function.htm

    【讨论】:

      【解决方案2】:

      很可能他们的 oracle 版本不支持返回子句。自从我在 1998 年围绕 Oracle 7 开始使用 Oracle 以来,值中的 to_date 就一直有效。 根据http://www.dba-oracle.com/plsql/t_plsql_dml.htm,return 子句是在 Oracle 9I 第 2 版中添加的。

      【讨论】:

      • 您知道检索生成的 ID 的替代方法吗?