[英]Need some assistance with LISTAGG options
LISTAGG
有 4000 個字符的限制。 任何人都可以幫助解決這個噩夢般的查詢嗎?
嗨,我在為應用程序提供數據的查詢中有這個錯誤的代碼。 在這種形式中,查詢沒有真正的條件。 正因為如此, LISTAGG
達到了 4000 個字符的限制。
這里還有其他選擇嗎? 根據所有內容的連接方式,我沒有看到一個簡單的答案:
SELECT
email,
first_name,
last_name,
LISTAGG(
type_id
||','|| type_status
||','|| filename
||','|| status_id
||','|| status_message
||','|| TO_CHAR(upload_date,'MM/DDYYYY')
||','|| broker
||','|| quarter
||','|| quarter_year
||':'
) WITHIN GROUP (ORDER BY upload_date DESC) filenames
FROM
(
SELECT
b.surrogate_key,
b.email,
b.type_id,
DECODE(a.file_type,NULL,0,1) type_status,
a.quarter,
a.quarter_year,
a.broker,
a.upload_date,
a.filename,
a.status_id,
b.first_name,
b.last_name,
a.status_message
FROM
(
SELECT DISTINCT
(editor || '~' || file_type) surrogate_key,
file_type,
quarter,
quarter_year,
broker,
filename,
upload_date,
status_id,
status_message
FROM upload_history
ORDER BY upload_date DESC
) a,
(
SELECT DISTINCT
(email||'~'||type_id) surrogate_key,
email,
type_id,
first_name,
last_name
FROM issuers
CROSS JOIN file_types
) b
WHERE
b.surrogate_key = a.surrogate_key(+)
)
GROUP BY
email,
first_name,
last_name,
type_id,
quarter,
quarter_year;
LISTAGG
的 4000 個字符限制的經典解決方法是使用XMLAGG
,如這篇著名的 AskTom 帖子中所述。
語法有點復雜。 在您的用例中,您需要替換這個:
LISTAGG(
type_id
||','|| type_status
||','|| filename
||','|| status_id
||','|| status_message
||','|| TO_CHAR(upload_date,'MM/DDYYYY')
||','|| broker
||','|| quarter
||','|| quarter_year
||':'
) WITHIN GROUP (ORDER BY upload_date DESC) filenames
和 :
REPLACE(REPLACE(
XMLAGG(XMLELEMENT("a",
type_id
||','|| type_status
||','|| filename
||','|| status_id
||','|| status_message
||','|| TO_CHAR(upload_date,'MM/DDYYYY')
||','|| broker
||','|| quarter
||','|| quarter_year
||':'
) ORDER BY upload_date DESC).getClobVal(),
'<a>', ''), '</a>', ',') filenames
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.