创建table,立即输出结果[db2-400]

Create table and immediately output the results [db2-400]

我首先想提一下,我处于一个非常重的黑盒环境中。 as400 上有一个存储过程可以在以后运行此查询。还有另一个过程需要创建 table,然后返回输出。这一切如何运作超出了我的控制范围。

我只能做一件事,将查询传递给创建 table 的存储过程,然后对其执行 select。

我正在尝试用数据创建一个 table 并立即在 1 个语句中输出所有结果。

客户端工具和我使用 .net 应用程序发送命令时出现相同的错误。

我 运行 遇到了障碍,它告诉我 Message: [SQL0104] Token ; was not valid. Valid tokens: <END-OF-STATEMENT>.

查询看起来像这样:

 CREATE table newTable as (select * from table1 join table2 on table1.id = table2.foreignId) with data;
 SELECT * from newTable;

现在我知道问题不是令牌无效,因为我可以将它用于其他语句。我假设这是因为我无法在同一批次中创建和 select。

我也试过用 BEGIN END 语句包装它,我得到 Message: [SQL0029] INTO clause missing from embedded statement.

我现在不知道如何在声明中完成这一切。我有一个完全不同的问题,即在多个语句中发送它,我无法保证这些语句的触发顺序。不幸的是,这是我无法更改的任何内容。

除了创建 table,我无法对数据库进行任何修改。这是我们仍在使用的遗留系统,唯一的目的是创建报告。此过程必须通过创建 table 并返回结果。

增加一些清晰度。我个人不需要结果。

我必须做的是生成一个动态查询。然后我接受这个查询,并将它加载到一个特殊的 table 中。然后我调用一个存储过程。这个存储过程然后从这个特殊的 table 中读取,执行我给它的查询。然后它获取它得到的结果并发送一封电子邮件。

我怀疑您使这种方式变得比需要的更复杂。根据下面的一些附加信息,我假设您可以 运行 这作为两个单独的查询,但您需要删除对第二个查询的依赖。用这个作为第一个:

select * from table1 join table2 on table1.id = table2.foreignId

并以此作为第二个:

CREATE table newTable as (
        select * 
        from table1 
        join table2 on table1.id = table2.foreignId)
    with data