Why didn't you refer X directly in SELECTs in the nested table expression?
I guessed that you couldn't see X in the nested table expression.
If so,
please try to use TABLE keyword, like this:
(You can see examples of TABLE keyword in Table 71 in V9 SQL Reference or Table 50 in V8 SQL Reference of DB2 for z/OS.)
Example 1:
Code:
DELETE FROM HR_TLO_ORG X
WHERE EXISTS (
SELECT *
FROM TABLE
(
SELECT 0 AS dummy
FROM HR_PLAN_ORGS A
INNER JOIN
HR_PLAN_USER_SCOPE B
ON A.R_CD = B.R_CODE
WHERE A.ACCESS_IND = 'N'
AND A.ORG_CD = X.LVL2_CD
AND B.IONS_ID = X.IONS_ID
UNION ALL
SELECT 0 AS dummy
FROM HR_PLAN_ORGS_I A
INNER JOIN
HR_PLAN_USER_SCOPE_I B
ON A.R_CD = B.R_CODE
WHERE A.ACCESS_IND = 'N'
AND A.ORG_CD = X.LVL2_CD
AND B.IONS_ID = X.IONS_ID
) AS XXX
)
;
More,
I think you can remove the nested table expression, like these.
Example 2-A:
Code:
DELETE FROM HR_TLO_ORG X
WHERE EXISTS (
SELECT 0 AS dummy
FROM HR_PLAN_ORGS A
INNER JOIN
HR_PLAN_USER_SCOPE B
ON A.R_CD = B.R_CODE
WHERE A.ACCESS_IND = 'N'
AND A.ORG_CD = X.LVL2_CD
AND B.IONS_ID = X.IONS_ID
UNION ALL
SELECT 0 AS dummy
FROM HR_PLAN_ORGS_I A
INNER JOIN
HR_PLAN_USER_SCOPE_I B
ON A.R_CD = B.R_CODE
WHERE A.ACCESS_IND = 'N'
AND A.ORG_CD = X.LVL2_CD
AND B.IONS_ID = X.IONS_ID
)
;
Example 2-B:
Code:
DELETE FROM HR_TLO_ORG X
WHERE EXISTS (
SELECT *
FROM HR_PLAN_ORGS A
INNER JOIN
HR_PLAN_USER_SCOPE B
ON A.R_CD = B.R_CODE
WHERE A.ACCESS_IND = 'N'
AND A.ORG_CD = X.LVL2_CD
AND B.IONS_ID = X.IONS_ID
)
OR
EXISTS (
SELECT *
FROM HR_PLAN_ORGS_I A
INNER JOIN
HR_PLAN_USER_SCOPE_I B
ON A.R_CD = B.R_CODE
WHERE A.ACCESS_IND = 'N'
AND A.ORG_CD = X.LVL2_CD
AND B.IONS_ID = X.IONS_ID
)
;