По сути, вы конвертируете SELECT
, который вы написали, в курсор ДЛЯ l oop и выполняете его.
Вот как; Я не могу это проверить, но - если SELECT
вернет то, что вы хотите, это способ сделать это.
SQL> show user
USER is "SYS"
SQL> BEGIN
2 FOR cur_r
3 IN (SELECT 'alter index '
4 || a.index_owner
5 || '.'
6 || a.index_name
7 || ' rebuild partition '
8 || a.partition_name
9 as l_alter
10 FROM dba_ind_partitions a
11 WHERE a.index_name IN ('IDX_PI_T_BSCS_CONTRACT_HISTOR2',
12 'IDX_PI_T_BSCS_CONTRACT_HISTOR3',
13 'IDX_PI_T_BSCS_RATEPLAN_HIST_C1')
14 AND a.status = 'UNUSABLE')
15 LOOP
16 EXECUTE IMMEDIATE cur_r.l_alter;
17 END LOOP;
18 END;
19 /
PL/SQL procedure successfully completed.
SQL>