1

FileNet を使用しています。ドキュメントがファイルされるフォルダを、セミコロンで区切られたレコード セットの 1 つの列に表示しようとしています。これは以前に決定されたレイアウトであり、私は 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サブクエリから値を 1 つしか取得していないため、句で相関サブクエリにすることができます。

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 に答える