【问题标题】:Create table and immediately output the results [db2-400]创建表并立即输出结果[db2-400]
【发布时间】:2020-07-06 20:04:06
【问题描述】:

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

我只能做一件事,将查询传递给创建表的存储过程,然后对其进行选择。

我正在尝试创建一个包含数据的表并立即将结果全部输出到 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;

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

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

我现在对如何在声明中做到这一切一无所知。我在多个语句中发送它有一个完全不同的问题,我不能保证这些语句的触发顺序。不幸的是,这超出了我所能改变的范围。

除了创建表之外,我没有对数据库进行任何修改的选项。这是我们仍在使用的遗留系统,唯一的目的是创建报告。这个过程必须通过创建一个表并返回结果。

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

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

【问题讨论】:

  • 添加更多详细信息。您可以使用一个过程并调用它。
  • NonQueryResult 不会创建结果集,但您的批次需要结果集。标记正确的 Db2 服务器平台(i-series/as400,或 Db2-for-Z/os,或 Db2 for Linux/Unix/Windows)。编辑您的问题以显示目标 Db2 版本和平台,以及您正在使用哪个供应商驱动程序(微软、ibm、datadirect 等)以及哪个版本。
  • @data_henrik procs 不是一个选项,除了创建表之外,我没有能力修改数据库
  • @mao 我会尝试看看我能得到什么更多信息。忽略它的非执行查询部分,我只是使用了错误的术语。我只是说一个查询,两个命令进入数据库。
  • 。这与 .NET 有什么关系?实际代码是什么?如果查询正确,并且该表不存在,DbCommand.ExecuteReader 将起作用。该错误虽然抱怨 SQL 查询。 I am simply saying one query with two commands going to database. 这不是“简单”。完全允许这种语法吗?您是否尝试过使用客户端工具执行该语句来检查其有效性?

标签: .net db2-400


【解决方案1】:

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

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

【讨论】:

  • 这个我没办法控制,存储过程需要一个表,然后它也需要结果
  • 该表用于保存报告,并且在proc使用的某些电子邮件过程中使用select。
  • 这里肯定有一些你没有解释的东西。正如您所说的问题,它无法正常工作。听起来此报告流程适用于其他报告。是否有某些原因您无法复制他们的做法?
  • 我所做的是新的。我的公司正在尝试利用旧的存储过程来做一些新的事情。我调用的过程存储传入的查询并一次运行一个查询。我的问题是我不能保证顺序,我需要先创建表才能选择它。如果我只是传入一个表格,它会创建它而不触发电子邮件。如果我创建一个选择,它将触发一封电子邮件,但不会创建一个表。如果我进行创建,然后选择 2 个查询,我会遇到选择不存在的表的问题,因为无法保证顺序
  • 你还没有解释为什么你需要创建一个表。我将假设您在其他一些过程中需要它,因为您没有描述在电子邮件过程中需要它的任何理由。
猜你喜欢
  • 1970-01-01
  • 2018-01-30
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多