No, but it can be part of the SQL predicate
SQL> create table t as select * from dba_objects where object_id is not null;
Table created.
SQL> alter table t add primary key ( object_id ) ;
Table altered.
SQL>
SQL> declare
2 type rowlist is table of t%rowtype
3 index by pls_integer;
4
5 r rowlist;
6 begin
7 select * bulk collect into r from t;
8
9 forall i in 1 .. r.count
10 update t
11 set owner = lower(owner)
12 where object_id = r(i).object_id
13 and r(i).object_type = 'INDEX';
14 end;
15 /
PL/SQL procedure successfully completed.
SQL> select owner from t where object_type = 'INDEX' and rownum <= 5;
OWNER
------------------------------
sys
sys
sys
sys
sys
SQL> select owner from t where object_type != 'INDEX' and rownum <= 5;
OWNER
------------------------------
SYS
SYS
SYS
SYS
SYS
However, you might want to consider splitting the array into multiple arrays to ensure you are not wasting resources working through an array that is larger than it needs to be.