Calling dbms_stats.gather_table_stats will always gather stats for the table you provide.
If you want to have a custom stale_percent for each table, just set this once for each table as you did in your first dbms_stats.set_table_prefs call.
Then call dbms_stats.gather_schema_stats (or gather_database_stats) with the options set to "GATHER_STALE" (or rely on the automatic job to do it for you).
There's no need to delete your preference again (unless you want them to return to the default).
For example, let's create two tables and set one to have a stale % of 90, the other 5%. Both have 100 rows:
create table high_pct (x not null) as
select rownum r from dual connect by level <= 100;
create table low_pct (x not null) as
select rownum r from dual connect by level <= 100;
exec dbms_stats.set_table_prefs(user,'HIGH_PCT','STALE_PERCENT',90);
exec dbms_stats.set_table_prefs(user,'LOW_PCT','STALE_PERCENT',5);
After we call table stats, both are analyzed:
exec dbms_stats.gather_table_stats(user,'HIGH_PCT');
exec dbms_stats.gather_table_stats(user,'LOW_PCT');
select table_name, last_analyzed from user_tables
where table_name like '%PCT';
TABLE_NAME LAST_ANALYZED
---------- -------------------
LOW_PCT 01/09/2015 11:18:50
HIGH_PCT 01/09/2015 11:18:50
If we delete half the rows, we only want LOW_PCT to be reanalyzed. Provided you call gather_schema_stats with the "GATHER STALE" option, this is what happens:
delete high_pct where x <= 50;
delete low_pct where x <= 50;
commit;
exec dbms_lock.sleep(15); -- just wait to make the difference obvious
exec dbms_stats.gather_schema_stats(user, options => 'GATHER STALE');
select table_name, last_analyzed from user_tables
where table_name like '%PCT';
TABLE_NAME LAST_ANALYZED
---------- -------------------
LOW_PCT 01/09/2015 11:19:05 <-- only this is reanalyzed
HIGH_PCT 01/09/2015 11:18:50
If you omit the option, then both are reanalyzed:
exec dbms_stats.gather_schema_stats(user);
select table_name, last_analyzed from user_tables
where table_name like '%PCT';
TABLE_NAME LAST_ANALYZED
---------- -------------------
LOW_PCT 01/09/2015 11:23:43 <-- both have the same time
HIGH_PCT 01/09/2015 11:23:43 <-- both have the same time