listagg là một chức năng được giới thiệu trong Oracle 11.2! hiện chức năng này được bugging chúng tôi phân phối, chúng tôi đang chuyển từ MySQL sang Oracle và chúng tôi có truy vấn này:thay thế cho listagg trong Oracle?
SELECT
p_id,
MAX(registered) AS registered,
listagg(MESSAGE, ' ') within GROUP (ORDER BY registered) AS MESSAGE
FROM
umm_parent_id_remarks_v m
GROUP BY
m.p_id;
là hoạt động tốt trong MySQL như xa như chúng ta biết gì bugging chúng tôi đang được Oracle nó trả VARCAR và không CLOB như chúng ta cần! văn bản rất lớn và chúng tôi cần nó là CLOB!
đây là những gì tôi đã cố gắng làm!
tạo bảng CLOB_T loại CLOB!
sau đó tạo ra các chức năng
create or replace
function listaggclob (t in clob_t)
return clob
as
ret clob := '';
i number;
begin
i := t.first;
while i is not null loop
if ret is not null then
ret := ret || ' ';
end if;
ret := ret || t(i);
i := t.next(i);
end loop;
return ret;
end;
bây giờ nếu tôi chạy nó:
SELECT
p_id,
MAX(registered) AS registered,
listaggclob(cast(collect (MESSAGE) as clob_t)) MESSAGE
FROM
umm_parent_id_remarks_v m
GROUP BY
m.p_id;
tôi nhận được
ORA-22.814: attribute hoặc giá trị phần tử lớn hơn quy định tại loại
có giải pháp nào cho nó không?
nhờ bạn
+1 cảm ơn cho liên kết thu thập! – tbone
Tôi đã viết chức năng của riêng mình và tôi đã cập nhật câu hỏi của mình, vui lòng xem lại câu hỏi của tôi một lần nữa, cảm ơn –
Tôi không biết tại sao bạn lại gặp phải lỗi đó - có lẽ bạn nên đăng câu hỏi đó làm câu hỏi mới, bạn sẽ nhận được nhiều người hơn nhìn nó theo cách đó. –