6. Multiset Operator
Combining the result of 2 nested tables into one is the purpose of multiset operators. We can use these operations only on nested tables.
Example:
SELECT CAST (MULTISET (SELECT field FROM table) AS collection-type
FROM DUAL;
A. Miltiset Union
The multiset UNION operator compares two nested tables and returns the nested table that includes the combined elements of both of the input tables.
Syntax:
x MULTISET UNION [ DISTINCT ] y
Example:SELECT Emp_id, Emp_add_ntab
MULTISET UNION Emp_add2_ntab multiset_union
FROM Employees_Demo;
B. Multiset Intersect
The Multiset intersect operator compares two nested tables and returns only those elements that are similar/common in both of the tables.
Syntax:
x MULTISET INTERSECT [ DISTINCT ] y
Example:SELECT Emp_id, Emp_add_ntab
MULTISET INTERSECT Emp_add2_ntab multiset_union
FROM Employees_Demo;
C. Multiset Except
After comparing both nested tables, it returns a nested table whose elements are in the first input nested table but not in the second.
Syntax:
x MULTISET EXCEPT [ DISTINCT ] y
Example:SELECT Emp_id, Emp_add_ntab
MULTISET EXCEPT Emp_add2_ntab multiset_union
FROM Employees_Demo;
DECLARE
TYPE nested_table is table of number;
table_1 nested_table := nested_table(1,3,6,4,4,3);
table_2 nested_table := nested_table(1,2,3,1,4,4);
table_3 nested_table ;
num NUMBER :=3;
PROCEDURE display_members (operation varchar2) IS
members VARCHAR2(2000);
prefix CHAR;
BEGIN
for i in table_3.first .. table_3.last loop
members := members||prefix||table_3(i);
prefix := ',';
end loop;
dbms_output.put_line('result of table_1 '||operation||' table_2 is '||members);
END display_members;
BEGIN
table_3 := table_1 MULTISET UNION table_2;
display_members('multiset union');
table_3 := table_1 MULTISET UNION DISTINCT table_2;
display_members('multiset union distinct');
table_3 := table_1 MULTISET INTERSECT table_2;
display_members('multiset intersect');
table_3 := table_1 MULTISET INTERSECT DISTINCT table_2;
display_members('multiset intersect distinct');
table_3 := table_1 MULTISET EXCEPT table_2;
display_members('multiset except');
table_3 := table_1 MULTISET EXCEPT DISTINCT table_2;
display_members('multiset except distinct');
table_3 := set (table_2); -- remove duplicates
END;
Oracle8i provides an interface that enables developers to define domain-specific operators and indexing schemes and integrate them into the database server. These operators are known as user-defined operators.
A user-defined operator is a schema object identified by a name that could be a character string or a special character or symbol. Similar to built-in operators, the user-defined operator takes a set of operands as input and returns a result. The implementation of the operator must be provided by the developer or data cartridge writer.
User-defined operators can be invoked anywhere built-in operators can be used, that is, wherever expressions can occur in queries and data manipulation statements, such as:
- The select list of a SELECT statement or sub-query
- The condition of a WHERE clause
- The ORDER BY and GROUP BY clauses
For more info on User Defined Operators please go through the following link:
Oracle User-Defined Operators
Previous article: Oracle Operators: Part 2

Gowtham RajamanickamPosted Apr 26, 2016, 3:10 AM
good article