Die Verkettung der Sammlungen in PLSQL

Ich muss zu sammeln eine Menge von ids von ein paar verschiedenen Tabellen in einer Variablen irgendwie übergeben werden, um eine weitere Funktion. Die Tabellen nehmen die ids aus, ist dynamisch, je nach der param-iVar unten. Die Frage ist, wenn es keinen besseren Weg, dies zu tun, da dieser Ansatz zu kopieren und neu zuordnen des arrays mehrmals. Wäre es besser, legen Sie Sie alle in eine temp-Tabelle? Es wäre besser, verwenden dynamisches sql. Finden Sie die get_ids Funktion unten:

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;
InformationsquelleAutor Joel Palmert | 2011-09-16
Schreibe einen Kommentar