【发布时间】: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.这不是“简单”。完全允许这种语法吗?您是否尝试过使用客户端工具执行该语句来检查其有效性?