INTO table 子句

使用 INTO Table 子句来创建新的临时的、永久的或外部的表来接收 SELECT 语句检索的数据。

INTO table
元素 描述 限制 语法
table 要接收查询结果的表在此声明的名称 在当前数据库中您拥有的表、视图、同义词和序列对象之中,必须是唯一的 标识符

您必须对要在其上创建临时的、永久的或外部表的数据库有 Connect 权限。在其他用户会话中的临时表的标识符之中,临时表的名称无需是唯一的。

在 Projection 子句中,必须指定在永久的、临时的或外部表中的列名称,在此,您必须为不是简单的列表达式的所有表达式提供显示标签。该显示标签成为在永久的、临时的或外部表中的列名称。如果您没有为简单的列表达式声明显示标签,则产生的新表使用 Projection 子句的选择列表中的列名称。

下列 INTO TEMP 示例创建 pushdate 表,带有两个列 customer_numslowdate
SELECT customer_num, call_dtime + 5 UNITS DAY slowdate
          FROM cust_calls INTO TEMP pushdate;

下列 INTO STANDARD 示例创建 stab1 表,带有两列 fcol1col2

SELECT col1::FLOAT fcol1, col2
        FROM tab1 INTO STANDARD stab1;

在此,col1 是该查询从其检索数据的 tab1 表中的 INTEGER 列,但 fcol1 值在产生的 stab1 表中被强制转型为 FLOAT。省略 STANDARD 关键字的查询会创建相同的结果表,因为 STANDARD 是缺省的表类型。

当没有返回行时的结果

当您使用与 WHERE 子句组合的 INTO Table 子句时,且没有返回行,则 SQLNOTFOUND 值在符合 ANSI 的数据库中是 100,在不符合 ANSI 的数据库中是 0。如果 SELECT INTO TEMP…WHERE… 语句是多语句 PREPARE 的一部分,且没有返回行,则对于符合 ANSI 的数据库和不符合 ANSI 的数据库,SQLNOTFOUND 值都是 100

GBase 8s 版本在遇到 SQLNOTFOUND 值 100 之后,继续处理多语句准备好的对象的剩余的语句。然而,您可维持传统的行为,通过将 IFX_MULTIPREPSTMT 环境变量设置为 1,不执行剩余的准备好的语句。

对 ESQL/C 中的 INTO table 子句的限制

GBase 8s ESQL/C 中,请不要在同一查询中同时使用 INTO table 子句与 INTO variable 子句。如果您同时使用,则不会向程序变量返回结果,且将 SQLCODE 变量设置为负值。要获取更多关于 INTO variable 子句的信息,请参阅 INTO 子句

1 请参阅 INTO EXTERNAL 子句
2 请参阅 存储选项
3 请参阅 LOCK MODE 选项