У меня есть цикл for, здесь:
BEGIN
for rws in (
select /*+parallel (4)*/ a.owner,a.table_name, round(sum(b.sum_bytes),2) TOT_OBJECT_SIZE_MB, EST_ONE_ROW_MB
from dba_tables@DB1 a, MV_PRD_SEG_DATA b
where a.table_name = b.segment_name
and a.table_name in
(select table_name from MV_PDU_TABLE where driver_table is null)
and a.owner in (select distinct productionschema from MV_PDU_TABLE c)
group by a.owner,a.table_name
order by a.table_name
)
loop
Данные извлекаются из цикла следующим образом путем ссылки на rws.:
execute immediate' select /*+parallel (4)*/ count(*) from ' ||rws.owner||'.'||rws.table_name || '@' || dblink into TOTAL_ROW_COUNT;
Теперь мне нужно заменить некоторые жестко закодированные ссылки на таблицы в операторе выбора на переменные.(Я буду объявлять их ранее в коде.)
Насколько я понимаю, теперь я должен переключиться на динамический SQL.
При этом вы можете увидеть здесь, как жестко закодированные таблицы теперь называются переменными:
BEGIN
v_sql1 := 'select /*+parallel (4)*/ a.owner,a.table_name, round(sum(b.sum_bytes),2) TOT_OBJECT_SIZE_MB, EST_ONE_ROW_MB
from dba_tables@NAB1 a, '|| v_Mv_name ||' b
where a.table_name = b.segment_name
and a.table_name in
(select table_name from '|| v_Mv_name ||' where driver_table is null)
and a.owner in (select distinct productionschema from '|| v_Mv_name ||' c)
group by a.owner,a.table_name
order by a.table_name';
Проблема в том ... как мне теперь управлять выводом данныхцикла?Я думаю, что я бы зациклился, просто используя переменную, содержащую SQL?:
for rws in (v_sql1)
loop
Если так, что теперь будет здесь?
execute immediate' select /*+parallel (4)*/ count(*) from ' <NO_IDEA_HOW_TO_REFERENCE_THE_DATA_IN_THE_LOOP_NOW> ' into TOTAL_ROW_COUNT;