Нужно повторить результат, а затем немедленно выполнить каждый результат, используя pl / sql - PullRequest
0 голосов
/ 29 апреля 2020

Итак, у меня есть этот запрос:

select 'alter index '||a.index_owner||'.'||a.index_name|| ' rebuild partition '||a.partition_name 
from dba_ind_partitions a
where a.index_name in ('IDX_PI_T_BSCS_CONTRACT_HISTOR2', 'IDX_PI_T_BSCS_CONTRACT_HISTOR3',  'IDX_PI_T_BSCS_RATEPLAN_HIST_C1')
and a.status =  'UNUSABLE'

И мне нужно перебрать результат, а затем execute immediate каждое утверждение.

1 Ответ

0 голосов
/ 29 апреля 2020

По сути, вы конвертируете 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>
...