需要迭代结果,然后使用 pl/sql 立即执行每个结果

Need to iterate the result and then execute immediate each result using pl/sql

所以我有这个查询:

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 每个语句。

基本上,您会将写入的 SELECT 转换为游标 FOR 循环并 执行 它。

方法如下;我无法测试它,但是 - 如果 SELECT returns 你想要什么,那就是这样做的方式。

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>