I am trying to export available SQL profiles into a staging table before upgrade. Since there are many SQL profiles I am trying to use a PL/SQL block to load all of them in a table.
declare
v_profname varchar2(1000);
cursor c_profname is select name from dba_sql_profiles;
r_profname c_profname%ROWTYPE;
v_sql varchar2(5000);
v_pack varchar2(8000);
begin
open c_profname;
v_sql := 'execute dbms_sqltune.create_stgtab_sqlprof(table_name=>''stg_sql_profiles'',schema_name=>''DBA_UTIL'');';
execute immediate :v_sql;
loop
fetch c_profname into r_profname;
exit when c_profname%NOTFOUND;
dbms_output.put_line('sql profile name:' || r_profname.name);
v_pack := 'execute dbms_sqltune.pack_stgtab_sqlprof(staging_table_name =>''stg_sql_profiles'',profile_name=>''r_profname.name'');';
execute immediate :v_pack;
end loop;
close c_profname;
dbms_output.put_line('All sql profiles exported');
end;
/
In v_pack dynamic SQL I am getting r_profname.name instead of actual profile name.
Need assistance on how to fix this.
Present Output:
sql profile name:SYS_SQLPROF_0245a98adf750000
dynamic sql statement is:execute dbms_sqltune.pack_stgtab_sqlprof(staging_table_name =>'stg_sql_profiles',profile_name=>'r_profname.name');
sql profile name:SYS_SQLPROF_015b877f29480000
dynamic sql statement is:execute dbms_sqltune.pack_stgtab_sqlprof(staging_table_name =>'stg_sql_profiles',profile_name=>'r_profname.name');
sql profile name:SYS_SQLPROF_015b882d68ec0000
dynamic sql statement is:execute dbms_sqltune.pack_stgtab_sqlprof(staging_table_name =>'stg_sql_profiles',profile_name=>'r_profname.name');
All sql profiles exported
Expected:
execute dbms_sqltune.pack_stgtab_sqlprof(staging_table_name =>'stg_sql_profiles',profile_name=>'SYS_SQLPROF_015b882d68ec0000');