D1_MV_REFRESH_PROC.sql 1.1 KB

1234567891011121314151617181920212223
  1. create or replace PROCEDURE D1_MV_REFRESH_PROC (mv_name varchar2, est_percent number)
  2. IS
  3. str varchar2(300);
  4. schma_name varchar2(20);
  5. tbl_owner varchar2(20);
  6. BEGIN
  7. begin
  8. SELECT USER INTO schma_name FROM DUAL;
  9. SELECT TABLE_OWNER INTO tbl_owner FROM ALL_SYNONYMS WHERE SYNONYM_NAME='D1_MV_REFRESH_PROC' AND OWNER= schma_name ;
  10. exception
  11. when no_data_found then
  12. SELECT USER INTO tbl_owner FROM DUAL;
  13. end;
  14. str := 'BEGIN DBMS_MVIEW.REFRESH('''||tbl_owner||'.'||mv_name||''',''C''); END;';
  15. EXECUTE IMMEDIATE str ;
  16. if (est_percent is null ) then
  17. str := 'BEGIN dbms_stats.gather_table_stats('''||tbl_owner ||''','''||mv_name||''', ESTIMATE_PERCENT=>dbms_stats.auto_sample_size,METHOD_OPT=>''for all indexed columns size auto'',CASCADE=>True,Degree => 32, Granularity => ''All''); END;';
  18. else
  19. str := 'BEGIN dbms_stats.gather_table_stats('''||tbl_owner ||''','''||mv_name||''', ESTIMATE_PERCENT=>'||est_percent||',METHOD_OPT=>''for all indexed columns size auto'',CASCADE=>True,Degree => 32, Granularity => ''All''); END;';
  20. end if;
  21. EXECUTE IMMEDIATE str ;
  22. END;
  23. /