
Mit Version 10g wurden die Funktionalitäten zum Arbeiten mit Nested Tables erheblich erweitert. Neu eingeführt wurden:
Diese neuen Funktionalitäten sind nur für Nested Tables nutzbar, nicht jedoch für Index By-Tabellen ("Associative Arrays") oder Varrays. Bei der Auswertung der enthaltenen Elemente spielt deren Reihenfolge keine Rolle.
Alle neuen Funktionalitäten sind sowohl in SQL als auch in PL/SQL nutzbar. Die beteiligten Nested Table-Variablen bzw. -Spalten müssen natürlich vom gleichen Basistyp sein.
Anmerkung: Als SET bezeichnet Oracle eine Sammlung von Elementen, die keine Duplikate enthält.
Diese speziell für Nested Tables neu eingeführten Operatoren liefern als Ergebnis stets wieder eine Nested Table vom gleichen Typ wie die beteiligten Operanden. Sie sind analog zu den den SET-Operatoren zu sehen (Der Default ist jeweils unterstrichen):
Bei mehrfachem Vorkommen des gleichen Elements werden bei Angabe von ALL doppelte Einträge nicht eliminiert, bei Angabe von DISTINCT dagegen schon.
Beispiel:
DECLARE
TYPE ttable IS TABLE OF NUMBER;
v1 ttable := ttable(1, 2, 3, 3);
v2 ttable := ttable (3, 3, 1, 1, 4);
result ttable;
BEGIN
result := v1 MULTISET UNION v2; -- (1, 2, 3, 3, 3, 3, 1, 1, 4)
result := v1 MULTISET UNION DISTINCT v2; -- (1, 2, 3, 4)
result := v1 MULTISET INTERSECT v2; -- (1, 3, 3)
result := v1 MULTISET INTERSECT DISTINCT v2; -- (1, 3)
result := v2 MULTISET EXCEPT v1; -- (1, 4)
result := v2 MULTISET EXCEPT DISTINCT v1; -- (4)
END;
Auch eine Reihe neuer Bedingungen wurde speziell für Nested Tables eingeführt:
Beispiele:
DECLARE
TYPE ttable IS TABLE OF NUMBER;
v1 ttable := ttable(1, 2, 3, 3);
v2 ttable := ttable(1, 2, 3);
result BOOLEAN;
v_count NUMBER;
BEGIN
result := v2 SUBMULTISET OF v1; -- (TRUE)
result := v1 NOT SUBMULTISET OF v2; -- (TRUE)
result := 2 MEMBER OF v1; -- (TRUE)
result := v1 IS A SET; -- (FALSE)
result := v1 IS EMPTY; -- (FALSE)
v_count := CARDINALITY(v1); -- (4)
v_count := CARDINALITY(SET(v1)); -- (3)
END;