查询重建域索引

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';

【讨论】:

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

索引的重建与查询

Oracle索引状态查询&索引重建

Sql 查询过慢,尝试重建索引

Sql server 创建索引后,只有查询后重建才会生效,不知为啥?

执行重建索引查询时出错(ORA-29874 和 ORA-29960)

SQL SEVER数据库重建索引的方法