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 |