我是使用 as400 的新手,我有一个跨 4 个表的连接查询。查询本身很好,它在 STRSQL 中运行并显示结果。
我正在努力使查询能够以编程方式运行(它最终将从预定的 CL 脚本中运行)。
我尝试创建一个物理文件,其中包含使用 RUNQRY 运行它的查询,但它只是显示查询本身,而不是实际的结果集。
有谁知道我做错了什么?
更新
感谢大家的指导和资源,有了他们,我能够实现我的目标。如果它对任何人有帮助,这就是我最终要做的事情(所有这些都是在它自己的库 ALLOCATE 中完成的):
创建了一个源物理文件(使用 CRTSRCPF):QSQLSRC,并创建了一个名为 SQLLEAGSEA 的成员,其类型为 TXT,其中包含 SQL 语句。
创建了另一个源物理文件:QCLSRC,并创建了一个名为 POPLEAGSEA 的成员,其类型为 CLP,将当前库更改为 ALLOCATE,然后使用 RUNSQLSTM 运行查询(下面有更多详细信息)。这是实际的命令:
RUNSQLSTM SRCFILE(QSQLSRC) SRCMBR(SQLLEAGSEA) COMMIT(*NONE) NAMING(*SYS)
将 CLP 添加到计划作业(使用 ADDJOBSCDE),运行以下命令:
呼叫 PGM(分配/POPLEAGSEA)
关于 RUNSQLSTM,我的研究表明我将无法使用此功能,因为它不支持 SELECT 语句。我在我的问题中没有指出的是我需要对结果做什么——我将把结果数据插入另一个表(如果我这样做了,我相信帮助可以解决很多问题更快)。如此有效,我不打算做一个 SELECT,我的最终结果实际上是一个 INSERT。所以我的 SQL 语句(在 SQLLEAGSEA 中)以:
插入分配/LEAGSEAS
选择 ... 呜呜呜呜...
根据我的研究,我发现 RUNSQLSTM 不支持 SELECT,因为它没有对结果做任何事情的机制。一旦我停止采取婴儿步骤并意识到我需要在同一个语句中选择和插入,它就解决了我的主要问题。
再次感谢大家!