Tôi cần thu thập nhiều id từ một vài bảng khác nhau thành một biến số nào đó được chuyển đến một hàm khác. Bảng nào để lấy id từ động, tùy thuộc vào thông số iVar bên dưới. Câu hỏi đặt ra là nếu không có cách nào tốt hơn để làm điều này vì cách tiếp cận này sẽ phải sao chép và phân bổ lại các mảng nhiều lần. Nó sẽ là tốt hơn để chèn nó tất cả trong một bảng tạm thời? Nó sẽ là tốt hơn để sử dụng sql năng động. Xem get_ids chức năng dưới đây:Kết hợp các bộ sưu tập trong PLSQL
FUNCTION concat (
iList1 IN ID_ARRAY,
iList2 IN ID_ARRAY
)
RETURN ID_ARRAY IS
lConcat ID_ARRAY;
BEGIN
SELECT column_value BULK COLLECT INTO lConcat FROM (
(SELECT column_value FROM TABLE(CAST(iList1 AS ID_ARRAY)))
UNION ALL
(SELECT column_value FROM TABLE(CAST(iList2 AS ID_ARRAY)))
);
RETURN lConcat;
END concat;
FUNCTION get_ids (
iVar IN NUMBER
)
RETURN ID_ID_ARRAY IS
lIds ID_ARRAY;
BEGIN
lids := get_ids0();
IF iVar = 1 THEN
lIds := concat(lFilter, get_ids1());
ELSE
lIds := concat(lFilter, get_ids3());
IF iVar = 4 THEN
lIds := concat(lFilter, get_ids4());
END IF;
END IF;
RETURN lIds;
END get_ids;
TẤT CẢ là tùy chọn. MULTISET UNION không sắp xếp lọc các mục nhập. – APC
phải là "không sắp xếp HOẶC lọc" 8-) – APC