我是使用 as400 的新手,我有一个跨 4 个表的连接查询。查询本身很好,它在 STRSQL 中运行并显示结果。
我正在努力使查询能够以编程方式运行(它最终将从预定的 CL 脚本中运行)。
我尝试创建一个物理文件,其中包含使用 RUNQRY 运行它的查询,但它只是显示查询本身,而不是实际的结果集。
有谁知道我做错了什么?
更新
感谢大家的指导和资源,有了他们,我能够实现我的目标。如果它对任何人有帮助,这就是我最终要做的事情(所有这些都是在它自己的库 ALLOCATE 中完成的):
RUNSQLSTM SRCFILE(QSQLSRC) SRCMBR(SQLLEAGSEA) COMMIT(*NONE) NAMING(*SYS)
调用 PGM(分配/POPLEAGSEA)
关于 RUNSQLSTM,我的研究表明我将无法使用此功能,因为它不支持 SELECT 语句。我在我的问题中没有指出的是我需要对结果做什么——我将把结果数据插入另一个表(如果我这样做了,我相信帮助可以解决很多问题更快)。如此有效,我不打算做一个 SELECT,我的最终结果实际上是一个 INSERT。所以我的 SQL 语句(在 SQLLEAGSEA 中)以:
插入
分配/LEASEAS
选择
...
等等等等等等
...
根据我的研究,我发现 RUNSQLSTM 不支持 SELECT,因为它没有对结果做任何事情的机制。一旦我停止采取婴儿步骤并意识到我需要在同一个语句中选择和插入,它就解决了我的主要问题。
再次感谢大家!
最佳答案
命令是 RUNSQLSTM
在物理文件成员或流文件中运行静态 SQL 语句。
它是一个非交互式命令,因此它不会执行试图返回结果集的 sql 语句。
如果您想要更多控制,包括运行交互式语句的能力,请参阅 Qshell db2 utility .
例如:
QSH CMD('db2 -f /QSYS.LIB/MYLIB.LIB/MYSRCFILE.FILE/MYSQL.MBR')
请注意
db2
实用程序仅接受 *SQL 命名约定。
关于sql - 如何以编程方式在 as400 上运行复杂查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922462/