查询重建域索引

Posted

技术标签:

【中文标题】查询重建域索引【英文标题】:Query to rebuilt domain index 【发布时间】:2020-09-30 15:11:43 【问题描述】:
Create or replace procedure REBUILD_X_TEXT
IS
Begin

 
EXECUTE IMMEDIATE 'ALTER INDEX Schema.table_name rebuild parameters('REPLACE metadata sync(every "SYSDATE+15/1440")')'; 
EXECUTE IMMEDIATE 'ALTER INDEX Schema.table_name NOPARALLEL';

End REBUILD_X_TEXT;

它给出了一个错误: PLS-00103:在期望以下之一时遇到符号“REPLACE”:* & = - + ; > at in is mod 余数 not rem return 返回 or != or ~= >= and or like2 like4 likec between into using ||多组批量成员子多组

【问题讨论】:

为了帮助获得答案,请详细说明您想要实现什么以及您的代码的上下文。 【参考方案1】:

如果您的 EXECUTE IMMEDIATE 语句中有单引号,则需要通过连续使用两个单引号将它们转义,如下所示:

CREATE OR REPLACE PROCEDURE REBUILD_X_TEXT
IS
BEGIN
    EXECUTE IMMEDIATE 'ALTER INDEX Schema.table_name rebuild parameters(''REPLACE metadata sync(every "SYSDATE+15/1440")'')';

    EXECUTE IMMEDIATE 'ALTER INDEX Schema.table_name NOPARALLEL';
END REBUILD_X_TEXT;

【讨论】:

【参考方案2】:

有时使用q-literals 处理这些事情会更容易:

EXECUTE IMMEDIATE q'[
   ALTER INDEX Schema.table_name 
   rebuild parameters('REPLACE metadata 
                       sync(every "SYSDATE+15/1440")
                       '
                     )
   ]'; 
EXECUTE IMMEDIATE 'ALTER INDEX Schema.table_name NOPARALLEL';

【讨论】:

以上是关于查询重建域索引的主要内容,如果未能解决你的问题,请参考以下文章