SQL> SQL> select * from a1; C1 C2 C3 -- ---------- ------ G 10 G_tag O 20 O_tag Q 30 Q_tag b 50 b_tag c 60 c_tag d 70 d_tag e 80 e_tag f 90 f_tag g 100 g_tag h 110 h_tag t 2 t_tag C1 C2 C3 -- ---------- ------ r 4 r_tag v 6 v_tag 13 rows selected. SQL> select * from a2; C1 C2 COL3 -- ---------- ------ G 110 110row O 120 120row Q 130 130row a 140 140row b 150 150row c 160 160row d 170 170row e 180 180row f 90 90row g 200 200row h 210 210row 11 rows selected. SQL> select * from a3; C1 C2 -- ---------- G 111 O 121 Q 131 a 141 b 151 c 161 d 171 e 181 f 191 g 201 h 211 11 rows selected. SQL> SQL> -- update a1.c2 with a3.c2 when a1.c1=a2.c1=a3.c1 SQL> -- Retrieve the entire set of a1.c3 SQL> declare 2 type c1_type is table of A2.c1%type; 3 type c2_type is table of A2.c2%type; 4 type c3_type is table of A1.c3%type; 5 x c1_type; 6 y c2_type; 7 w c3_type; 8 begin 9 select c1,c2 bulk collect into x,y from A2; 10 FORALL i in 1..x.count 11 update A1 set c2=(select c2 from a3 where c1=x(i)) where c1=x(i) 12 RETURNING c3 BULK COLLECT INTO w; 13 14 For i in 1..w.count loop 15 DBMS_OUTPUT.PUT_LINE(w(i)); 16 end loop; 17 18 end; 19 / G_tag O_tag Q_tag b_tag c_tag d_tag e_tag f_tag g_tag h_tag PL/SQL procedure successfully completed. SQL> select * from a1; C1 C2 C3 -- ---------- ------ G 111 G_tag O 121 O_tag Q 131 Q_tag b 151 b_tag c 161 c_tag d 171 d_tag e 181 e_tag f 191 f_tag g 201 g_tag h 211 h_tag t 2 t_tag C1 C2 C3 -- ---------- ------ r 4 r_tag v 6 v_tag 13 rows selected. SQL> rollback; Rollback complete. SQL> SQL> spool off