If they are database types, just plain old SQL should be fine
SQL> create or replace type typ_table_rec is object
2 (
3 schema_name varchar2(30 char),
4 table_name varchar2(30 char)
5 );
6 /
Type created.
SQL>
SQL> create or replace type nt_tbl_rec is table of typ_table_rec;
2 /
Type created.
SQL>
SQL> create or replace
2 type t_descr_array is table of varchar2(100);
3 /
Type created.
SQL>
SQL> set serverout on
SQL> declare
2 v_nt_tbl_rec nt_tbl_rec := nt_tbl_rec();
3 v_descriptions t_descr_array := t_descr_array();
4 begin
5 v_nt_tbl_rec.extend(5);
6 v_nt_tbl_rec(1) := typ_table_rec('a','x');
7 v_nt_tbl_rec(2) := typ_table_rec('b','x');
8 v_nt_tbl_rec(3) := typ_table_rec('c','y');
9 v_nt_tbl_rec(4) := typ_table_rec('d','y');
10 v_nt_tbl_rec(5) := typ_table_rec('a','y');
11
12
13 select distinct table_name bulk collect into v_descriptions
14 from table(v_nt_tbl_rec);
15 dbms_output.put_line(v_descriptions.count);
16
17
18 end;
19 /
2
PL/SQL procedure successfully completed.
SQL>
SQL>