INSERT 语句中缺少 SELECT 关键字错误

Posted

技术标签:

【中文标题】INSERT 语句中缺少 SELECT 关键字错误【英文标题】:missing SELECT keyword error from INSERT statement 【发布时间】:2014-09-17 20:40:15 【问题描述】:

好的,我有这个命令:

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,和我们一样。删除了返回到子句,但仍然收到相同的错误。

【问题讨论】:

【参考方案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 的替代方法吗?

以上是关于INSERT 语句中缺少 SELECT 关键字错误的主要内容,如果未能解决你的问题,请参考以下文章

oracle中select缺少into?

SQL插入语句

insert into语句的语法错误

sql中的insert语句中的select语句返回多行

ORA_00905:缺失关键字

Hive insert 字段表错位踩坑