drop table DEMO purge;

create table DEMO(
	 c1 INTEGER not null
	,c2 INTEGER not null
	,c3 DATE
);

create index IDX1 on DEMO(c1);

insert into DEMO(c1,c2,c3) 
select 
	 to_number(COLUMN_VALUE)
	,to_number(COLUMN_VALUE)
	,DATE'2024-01-01' + trunc(DBMS_RANDOM.VALUE(1,30*4))
from xmltable('1 to 10000');

update DEMO set c1=1 where c1<=9000;

commit;

exec dbms_stats.delete_table_stats(user,'DEMO');
exec dbms_stats.gather_table_stats(user,'DEMO');
exec dbms_stats.gather_table_stats (user, 'DEMO', method_opt=>'for all columns size 1'); 
exec dbms_stats.gather_table_stats (user, 'DEMO', method_opt=>'for all columns size auto'); 

col column_name for a20

select column_name,num_distinct,density,num_nulls,num_buckets,sample_size,histogram  
from user_tab_col_statistics  
where table_name='DEMO';

-- best with FULL scan
alter system flush shared_pool;
var b1 NUMBER;
var b2 NUMBER;
execute :b1:=1;
execute :b2:=128;
select  /*+ GATHER_PLAN_STATISTICS */ max(c3) from DEMO where c1=:b1 and c2=:b2; 
@xlast


@coe_xfr_sql_profile 9g1m1cg9uprrp 2180342005

-- disable / drop SQL Profile
exec dbms_sqltune.alter_sql_profile('coe_9g1m1cg9uprrp_2180342005','STATUS','DISABLED');
exec dbms_sqltune.drop_sql_profile('coe_9g1m1cg9uprrp_2180342005');

create index IDX2 on DEMO(c1,c2);

-- best with INDEX scan
alter system flush shared_pool;
var b1 NUMBER;
var b2 NUMBER;
execute :b1:=9999;
execute :b2:=9999;
select  /*+ GATHER_PLAN_STATISTICS */ max(c3) from DEMO where c1=:b1 and c2=:b2; 
@xlast


-- drop SQL baseline(s)
declare
	drop_result pls_integer;
begin
	drop_result := DBMS_SPM.DROP_SQL_PLAN_BASELINE(
		sql_handle => 'SQL_d6312d092279077a',
		plan_name => NULL
		);
	dbms_output.put_line(drop_result);
end;
/



SET LONG 10000
var report clob;
begin
  :report := dbms_spm.evolve_sql_plan_baseline(
  	sql_handle=>'SQL_7e1afe4c21a1e2af'
  	,plan_name=>'SQL_PLAN_7w6ry9hhu3spg179a032f'
  	,time_limit=>5
  	,VERIFY=>'YES'
  	,COMMIT=>'NO'
  );
end;
/
print :report




