关于插入语句的IBM的Informix文档的困惑

时间:2018-06-11 14:02:18

标签: documentation sql-insert informix insert-into

我目前正在使用800px。我发现两个似乎与插入语句的Informix 12.10 FC6子句相矛盾的内容。这两份文件均来自VALUES IBM文件。任何人都可以解释这些差异以及为什么它们不相互矛盾。困惑我的部分似乎是说表达式不能添加到VALUES子句中,而且可以添加。 我正在寻找一些关于我所缺少的内容的澄清。

以下是链接:

Link 1

Link 2

1 个答案:

答案 0 :(得分:1)

Informix SQL Tutorial – Insert rows — Possible column values - 在问题中也称为“链接1” - 从声明开始:

  

VALUES子句只接受常量值,而不是一般的SQL表达式。

Informix Guide to SQL: Syntax — INSERT statement — VALUES clause - 在问题中也称为“链接2” - 全面涵盖INSERT语句,包括其在ESQL / C(嵌入式SQL in C)代码和SPL(存储过程语言)代码中的使用。它列出了可以使用的更多选项,例如主机变量(标记为“仅ESQL / C”和“Informix扩展”)。它还列出了诸如“表达式”和“常量表达式”之类的选项。

本教程过分简化了允许的内容。

语法手册更全面,更准确。在VALUES子句中可以使用的内容仍有限制,但它们比教程中的简单描述更具扩展性 - 但它是一个教程。当涉及到细节时,VALUES子句中的每个值都是单个值,可能是函数求值或其他表达式的结果。可以使用SELECT语句的形式有严格限制,但可以使用它们:

create table x(i integer not null primary key);
insert into x values(1024);
insert into x values((select max(i)+1 from x));

需要围绕SELECT的括号以及VALUES子句周围的括号,因此需要加倍括号。