问题描述
我想遍历一个包含程序和表递归列表的表,以查找特定程序 MYpgm 及其子程序使用的所有程序和表。到目前为止,这是有效的:
SELECT CONNECT_BY_ROOT WHONAM AS TOP_LEVEL,WHONAM AS REF_A,WHRNAM AS REF_B,WHRTYP AS Obj_Type,WHRATR OBJ_ATTTR,WHUSG AS USAGE,LEVEL WHONAM
FROM MYLIB/MYREF
START WITH WHONAM = 'MYpgm'
CONNECT BY PRIOR WHRNAM = WHONAM
现在我想对 table.field MYLIST.MY_pgm_NAME 中的所有程序执行相同的操作,而不仅仅是程序 'MYpgm'。我在合并 JOIN 子句时遇到问题,不知道如何处理 START WITH 子句。希望我清楚。
谢谢,
解决方法
考虑使用 SQL 标准语法进行递归。此处的 Db2 for i 手册中有一个物料清单示例https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/db2/rbafzrecurse.htm
WITH RPL (PART,SUBPART,QUANTITY) AS
( SELECT ROOT.PART,ROOT.SUBPART,ROOT.QUANTITY
FROM PARTLIST ROOT
WHERE ROOT.PART = '01'
UNION ALL
SELECT CHILD.PART,CHILD.SUBPART,CHILD.QUANTITY
FROM RPL PARENT,PARTLIST CHILD
WHERE PARENT.SUBPART = CHILD.PART
)
SELECT DISTINCT PART,QUANTITY
FROM RPL
ORDER BY PART,QUANTITY