1

我正在使用 FileNet。我试图让文档可能被归档的文件夹出现在用分号分隔的记录集的一列中。这是之前决定的布局,我的任务是让 Oracle 去做。到目前为止,这是我的查询:

SELECT d1.F_DOCNUMBER,
d1.F_DOCCLASSNUMBER,
d1.F_ENTRYDATE,
d1.F_ARCHIVEDATE,
d1.F_RETENTBASE,
d1.F_RETENTDISP,
d1.F_RETENTOFFSET,
d1.F_PAGES,
d1.F_DOCTYPE,
d1.F_DOCFORMAT,
d1.A32 AS CERT_NUM,
d1.A35 AS DOC_TYPE,
d1.A36 AS BATCH_KEY,
d1.A37 AS FIELD_REP_CODE,
d1.A38 AS EFFECTIVE_DATE,
d1.A39 AS VOUCH_NUM_HIGH,
d1.A40 AS VOUCH_NUM_LOW,
f1.Folders
FROM doctaba d1
LEFT JOIN (SELECT SUBSTR (SYS_CONNECT_BY_PATH (F_FOLDERNAME , ';'), 2) Folders
    FROM (SELECT fc2.F_DOCNUMBER, f2.F_FOLDERNAME, ROW_NUMBER () OVER (ORDER BY f2.F_FOLDERNAME) rn, COUNT (*) OVER () cnt
            FROM folder_contents fc2
            INNER JOIN folder f2
            ON f2.F_FOLDERNUMBER = fc2.F_FOLDERNUMBER
            WHERE fc2.F_DOCNUMBER = d1.F_DOCNUMBER)
    WHERE rn = cnt
    START WITH rn = 1
    CONNECT BY rn = PRIOR rn + 1) f1
ON d1.F_DOCNUMBER = f1.F_DOCNUMBER
WHERE d1.F_DOCTYPE IS NULL
AND d1.F_DOCNUMBER >= 107777
AND d1.F_DOCNUMBER <= 305791
ORDER BY d1.F_DOCNUMBER;

问题是 d1.F_DOCNUMBER 被标记为无效标识符。我在一些论坛上读到,Oracle 可能不会让该列标识符在多个查询级别下工作。有人对如何使这项工作有一些建议吗?谢谢!

编辑:这是我的原始查询,仅包含行中的文件夹值。

SELECT doctaba.F_DOCNUMBER,
doctaba.F_DOCCLASSNUMBER,
doctaba.F_ENTRYDATE,
doctaba.F_ARCHIVEDATE,
doctaba.F_RETENTBASE,
doctaba.F_RETENTDISP,
doctaba.F_RETENTOFFSET,
doctaba.F_PAGES,
doctaba.F_DOCTYPE,
doctaba.F_DOCFORMAT,
doctaba.A32 AS CERT_NUM,
doctaba.A35 AS DOC_TYPE,
doctaba.A36 AS BATCH_KEY,
doctaba.A37 AS FIELD_REP_CODE,
doctaba.A38 AS EFFECTIVE_DATE,
doctaba.A39 AS VOUCH_NUM_HIGH,
doctaba.A40 AS VOUCH_NUM_LOW,
folder.F_FOLDERNAME
FROM doctaba
LEFT JOIN folder_contents
ON doctaba.F_DOCNUMBER = folder_contents.F_DOCNUMBER
INNER JOIN folder
ON folder.F_FOLDERNUMBER = folder_contents.F_FOLDERNUMBER
WHERE doctaba.F_DOCTYPE IS NULL
AND doctaba.F_DOCNUMBER >= 107777
AND doctaba.F_DOCNUMBER <= 17208174
ORDER BY doctaba.F_DOCNUMBER;
4

1 回答 1

0

在这种情况下,你很幸运。您只能从子查询中获取一个值,因此您可以在select子句中将其设为相关子查询:

SELECT . . .
       (SELECT SUBSTR(SYS_CONNECT_BY_PATH (F_FOLDERNAME , ';'), 2) as Folders
        FROM (SELECT fc2.F_DOCNUMBER, f2.F_FOLDERNAME,
                     ROW_NUMBER () OVER (ORDER BY f2.F_FOLDERNAME) rn,
                     COUNT (*) OVER () cnt
              FROM folder_contents fc2 INNER JOIN
                   folder f2
                   ON f2.F_FOLDERNUMBER = fc2.F_FOLDERNUMBER
              WHERE fc2.F_DOCNUMBER = d1.F_DOCNUMBER
             )
        WHERE rn = cnt
        START WITH rn = 1
        CONNECT BY rn = PRIOR rn + 1
       ) as Folders
FROM doctaba d1
WHERE d1.F_DOCTYPE IS NULL AND
      d1.F_DOCNUMBER >= 107777 AND
      d1.F_DOCNUMBER <= 305791
ORDER BY d1.F_DOCNUMBER;
于 2013-08-26T21:59:04.143 回答