如何将DB2 SQL结果表移动到物理文件中?

时间:2011-11-13 11:36:42

标签: sql db2 ibm-midrange rpgle

我想从SELECT语句中获取结果表,然后将其移动到物理文件中。

我希望使用(每W3Schools):

SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename 

不幸的是,根据IBM手册(DB2 for i SQL参考)

  

SELECT INTO语句生成一个由最多行组成的结果表,并将该行中的值分配给变量。

那么我想也许我可以使用:

  

INSERT语句将行插入表或视图中       本声明有三种形式:
  1. INSERT使用全选表单用于使用其他表或视图中的值将一行或多行插入表或视图。

不幸的是,它似乎对我不起作用。

INSERT INTO <tablename>
FROM ( SELECT (*) FROM <querytableA>
       UNION
       SELECT (*) FROM <querytableB>)

我能够将结果表移动到物理文件中,但为了做到这一点,我必须声明一个游标,然后用do … while写入物理文件,一次一个记录。我认为这个丑陋且不优雅,并且希望能够使用SELECT INTOINSERT INTO声明。

请帮我把结果表“转储”到一个带有一个优雅语句的物理文件中。

操作系统:IBM i v6.1
数据库:DB2

2 个答案:

答案 0 :(得分:8)

如果您想自动创建表格,您还可以使用以下表格:

CREATE TABLE new_table_name 
AS (SELECT * FROM <querytableA> 
    UNION SELECT * FROM <querytableB>) WITH DATA

请注意,您可以在查询上创建视图,以根据需要动态构建结果集。然后可以从任何HLL引用该视图作为逻辑文件:

CREATE VIEW new_table_name
AS SELECT * FROM <querytableA>
   UNION SELECT * FROM <querytableB>

答案 1 :(得分:3)

这是正确的语法:

INSERT INTO <dest_table> 
Select * FROM <querytableA>
UNION
Select * FROM <querytableB>

要实现此目标,<dest_table>必须已存在,其列与<querytableA><querytableB>中的列兼容。

有关详细信息,请参阅“Inserting rows using a select-statement”。