SCOTTスキーマが持つテーブルの中で現在失効している統計情報を取得しなおすプロシージャです。無名ブロックで記載しているのでDBへのストアドは不要でお気軽です。fetch first xxx rows only の部分を適当に変えて使ってください。
declare exesql varchar2(800); exeobj varchar2(80); BEGIN FOR CUR IN (select t.OWNER,t.TABLE_NAME from DBA_TAB_STATISTICS t where t.OWNER='SCOTT' and t.STALE_STATS ='YES' fetch first 100 rows only ) LOOP exesql := 'begin DBMS_STATS.GATHER_TABLE_STATS( OWNNAME => ''"'|| CUR.OWNER||'"'',TABNAME => ''"'||CUR.TABLE_NAME||'"'',METHOD_OPT => ''FOR ALL COLUMNS SIZE AUTO''); end;'; exeobj := CUR.OWNER||'.'||CUR.TABLE_NAME; EXECUTE IMMEDIATE exesql; DBMS_OUTPUT.PUT_LINE(exeobj); END LOOP; END;