Looks like the nice PL/SQL facility for returning a set of updated rows is restricted when it comes to database links
(This tested on 12.1.0.1)
SQL> declare
2 type int_list is table of number(12) index by pls_integer;
3 l_results int_list;
4
5 begin
6 update MY_TABLE b
7 set b.my_col = ( select max(last_ddl_time) from user_objects@dblink where object_id = b.key_col)
8 where b.my_col is null
9 returning b.other_col bulk collect into l_results;
10 end;
11 /
declare
*
ERROR at line 1:
ORA-22816: unsupported feature with RETURNING clause
ORA-06512: at line 6
When we remove the database link, things revert to what we would expect
SQL> declare
2 type int_list is table of number(12) index by pls_integer;
3 l_acct int_list;
4
5 begin
6 update MY_TABLE b
7 set b.my_col = ( select max(last_ddl_time) from user_objects where object_id = b.key_col)
8 where b.my_col is null
10 returning b.other_col bulk collect into l_results;
11 end;
12 /
PL/SQL procedure successfully completed.
A workaround is to perform an equivalent SELECT to fetch the required data from the remote source (for example, into a temporary table), and then update locally.