DB2 - Problem description
| Problem IC62258 | Status: Closed |
CORRELATED HIERARCHICAL QUERY RETURNS INCORRECT RESULT IN DPF | |
| product: | |
DB2 FOR LUW / DB2FORLUW / 970 - DB2 | |
| Problem description: | |
A correlated hierarchical query may return incorrect result in
DPF in DB2.
.
Below is an example of a correlated hierarchical query:
.
SELECT CB.NAME, CB.CHAIN
FROM MANAGERS M,
TABLE(SELECT NAME, CONNECT_BY_ROOT NAME AS ROOT,
SUBSTR(SYS_CONNECT_BY_PATH(NAME, ':'), 1, 25) AS CHAIN
FROM MY_EMP START WITH NAME = M.NAME
CONNECT BY PRIOR EMPID = MGRID
ORDER SIBLINGS BY NAME) CB
WHERE M.DEPT IN ('HR', 'FINANCE'); | |
| Problem Summary: | |
****************************************************************
* USERS AFFECTED: *
* DPF customers *
****************************************************************
* PROBLEM DESCRIPTION: *
* A correlated hierarchical query may return incorrect result *
* in *
* DPF in DB2. *
* *
* . *
* *
* Below is an example of a correlated hierarchical query: *
* *
* . *
* *
* SELECT CB.NAME, CB.CHAIN *
* *
* FROM MANAGERS M, *
* *
* TABLE(SELECT NAME, CONNECT_BY_ROOT NAME AS ROOT, *
* *
* SUBSTR(SYS_CONNECT_BY_PATH(NAME, ':'), 1, 25) AS CHAIN *
* *
* FROM MY_EMP START WITH NAME = M.NAME *
* *
* CONNECT BY PRIOR EMPID = MGRID *
* *
* ORDER SIBLINGS BY NAME) CB *
* *
* WHERE M.DEPT IN ('HR', 'FINANCE'); *
****************************************************************
* RECOMMENDATION: *
* Upgrade to DB2 v9.7 Fixpack 1 or later. *
**************************************************************** | |
| Local Fix: | |
If possible rewrite the query to an equivalent one without a
correlated hierarchical query:
SELECT CB.NAME, CB.CHAIN
FROM MANAGERS M,
TABLE(SELECT NAME, CONNECT_BY_ROOT NAME AS ROOT,
SUBSTR(SYS_CONNECT_BY_PATH(NAME, ':'), 1, 25) AS CHAIN
FROM MY_EMP CONNECT BY PRIOR EMPID = MGRID
ORDER SIBLINGS BY NAME) CB
WHERE M.DEPT IN ('HR', 'Finance') AND M.NAME=CB.ROOT;
.
However, consider the performance implications of the rewritten
query. For example, the above hierarchical query no longer has
a START WITH clause. A START WITH clause on some other
attribute is recommended to limit the number of rows produced
bythe hierarchical query. | |
| available fix packs: | |
DB2 Version 9.7 Fix Pack 1 for Linux, UNIX, and Windows | |
| Solution | |
The problem is first fixed in DB2 v9.7 Fixpack 1. | |
| Workaround | |
If possible rewrite the query to an equivalent one without a
correlated hierarchical query:
SELECT CB.NAME, CB.CHAIN
FROM MANAGERS M,
TABLE(SELECT NAME, CONNECT_BY_ROOT NAME AS ROOT,
SUBSTR(SYS_CONNECT_BY_PATH(NAME, ':'), 1, 25) AS CHAIN
FROM MY_EMP CONNECT BY PRIOR EMPID = MGRID
ORDER SIBLINGS BY NAME) CB
WHERE M.DEPT IN ('HR', 'Finance') AND M.NAME=CB.ROOT;
.
However, consider the performance implications of the rewritten
query. For example, the above hierarchical query no longer has
a START WITH clause. A START WITH clause on some other
attribute is recommended to limit the number of rows produced
bythe hierarchical query. | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 28.07.2009 29.04.2010 29.04.2010 |
| Problem solved at the following versions (IBM BugInfos) | |
9.7.FP1 | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 9.7.0.1 |
|