Oracle START WITH子句不返回根行

Oracle START WITH子句不返回根行,oracle,plsql,hierarchical-query,Oracle,Plsql,Hierarchical Query,我正在Oracle 10g中执行以下查询,以检索分层形式的数据。完整的查询稍微复杂一些: SELECT LEVEL AS lvl, a.* FROM ( WITH temp AS (...) SELECT id_request, subj_type, id_subj, name, flag_e, person_code, assoc_type, nature, parent FROM temp, (..

我正在Oracle 10g中执行以下查询,以检索分层形式的数据。完整的查询稍微复杂一些:

SELECT LEVEL AS lvl, a.*
 FROM (
      WITH temp
        AS (...)
    SELECT id_request, subj_type, id_subj, name, flag_e,
           person_code, assoc_type, nature, parent
      FROM temp,
           (...)
    ) a
START WITH a.parent IS NULL
CONNECT BY PRIOR a.id_subj = a.parent;
这是内部选择返回的集合:

ID_REQUEST  SUBJ_TYPE   ID_SUBJ                             NAME            FLAG_E  PERSON_CODE         ASSOC_TYPE  NATURE  PARENT
91948       F           4A4BE76C44D4003CE0530AA000A6003C    John Smith      0       xxxyyy123456zzzzz   Declarant   F       NULL
91948       C           4A4BE76C44D6003CE0530AA000A6003C    Rose Anderson   0       kkkkkk654321qqqqq   NULL        F       4A4BE76C44D4003CE0530AA000A6003C
如果我在没有START WITH子句的情况下运行整个查询,我将正确地得到以下结果:

LVL ID_REQUEST  SUBJ_TYPE   ID_SUBJ                             NAME            FLAG_E  PERSON_CODE         ASSOC_TYPE  NATURE  PARENT                          
1   91948       C           4A4BE76C44D6003CE0530AA000A6003C    Rose Anderson   0       kkkkkk654321qqqqq   NULL        F       4A4BE76C44D4003CE0530AA000A6003C
1   91948       F           4A4BE76C44D4003CE0530AA000A6003C    John Smith      0       xxxyyy123456zzzzz   Declarant   F       NULL                                
2   91948       C           4A4BE76C44D6003CE0530AA000A6003C    Rose Anderson   0       kkkkkk654321qqqqq   NULL        F       4A4BE76C44D4003CE0530AA000A6003C
但是如果我使用START with子句运行它,查询将不返回任何行,而我希望返回2行:

LVL     ID_REQUEST  SUBJ_TYPE   ID_SUBJ                             NAME            FLAG_E  PERSON_CODE         ASSOC_TYPE  NATURE  PARENT
1       91948       F           4A4BE76C44D4003CE0530AA000A6003C    John Smith      0       xxxyyy123456zzzzz   Declarant   F       NULL
2       91948       C           4A4BE76C44D6003CE0530AA000A6003C    Rose Anderson   0       kkkkkk654321qqqqq   NULL        F       4A4BE76C44D4003CE0530AA000A6003C
最奇怪的是:

问题只在某些情况下出现,而查询适用于大多数情况,在数据值方面没有很大差异; 如果使用内部select的结果集创建一个表,则即使使用STARTWITH子句,同一查询也能正常工作。 这是使用创建的表进行的查询:

  select LEVEL as lvl, a.*
    from (select * from test_tbl) a
   start with a.parent is null
 connect by PRIOR a.id_subj = a.parent;
似乎START WITH子句与PARENT字段中的NULL值不匹配。为什么会发生这种情况

提前谢谢。
致以最诚挚的问候。

请尝试以下方法。使事情具体化

WITH
temp AS (...),
a as (
    SELECT /*+ materialize */ id_request, subj_type, id_subj, name, flag_e,
           person_code, assoc_type, nature, parent
      FROM temp,
           (...)
)
SELECT LEVEL AS lvl, a.*
 FROM a
START WITH a.parent IS NULL
CONNECT BY PRIOR a.id_subj = a.parent;

对我来说似乎很管用,从你发布的内容中提取内部查询结果——我得到了两行回复。需要明确的是,内部查询显示的NULL实际上是NULL,而不是字符串“NULL”,也不是char或其他填充字符串值?您需要发布足够的代码,以便我们理解您的问题。如果您的整个查询太复杂,无法在此处发布,则需要编写一个小的测试用例来重现问题。@Alex Poole:是的,这些都是空的原始值。我用空这个词只是为了说明它不是空的。我可以补充说,我已经使用UTL_RAW.compare.Accepted检查过它们是否被识别为NULL,即使不需要使用提示。使用WITH子句实现select就足够了。谢谢!