sql - 如何以编程方式在 as400 上运行复杂查询?

标签 sql ibm-midrange db2-400

我是使用 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 中)以:
    插入
    分配/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/

    相关文章:

    sql - 在公共(public)列上加入 2 个 SELECT 语句

    java - 更新 DB2 for iSeries 表时出现错误 SQL7008

    ibm-midrange - CL : Path name contains embedded nulls (CPD018A)

    excel - 在 JOIN 中使用 CASE 加速 SQL 查询

    java - 我得到 java.sql.SQLException : The connection does not exist

    mysql - 如果右表匹配则排除记录

    mysql - SQL 中 NULL 的大小写

    mysql - 检查用户匹配数组是否作为具有匹配列的链接表中的条目存在

    sql - 对AS400上的多成员文件进行SQL查询

    SQL 查询 - db2/400 iseries