Oracle Drop Index,然后在CREATEBACK Index之后插入语句,在过程中不起作用

Oracle Drop Index,然后在CREATEBACK Index之后插入语句,在过程中不起作用,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,上面是我在insert语句之前删除索引的过程,之后创建回索引。但它不起作用,任何人都可以帮助?您的语法不正确。见下文: create or replace PROCEDURE INSSEL_TBL_TEST AS BEGIN DECLARE TBL varchar2(50):= 'ESSCSHSTMTBPTEST2'; tblNm varchar2(50); CURSOR tableIndexList IS (select ES_INDEX_NM,ES_TBL_NM,ES_CRT_I

上面是我在insert语句之前删除索引的过程,之后创建回索引。但它不起作用,任何人都可以帮助?

您的
语法不正确。见下文:

create or replace PROCEDURE INSSEL_TBL_TEST AS
BEGIN
DECLARE
  TBL varchar2(50):= 'ESSCSHSTMTBPTEST2';
  tblNm varchar2(50);

CURSOR tableIndexList IS 
(select ES_INDEX_NM,ES_TBL_NM,ES_CRT_INDEX_STMT,ES_DROP_INDEX_STMT FROM ESSP.ESSINDEXCONF WHERE ES_TBL_NM = TBL);

BEGIN
  FOR drpInd in tableIndexList LOOP
    EXECUTE IMMEDIATE 'drpInd.ES_DROP_INDEX_STMT';
    COMMIT;
  END LOOP;

  execute immediate ('insert into ESSPREP.' ||UPPER(TBL)|| ' select * from ESSP.' ||UPPER(TBL)|| '@ESSPREPLINKESSP');

  FOR drpInd in tableIndexList Loop
    execute immediate 'drpInd.ES_CRT_INDEX_STMT';
    COMMIT;
  END LOOP;
END;
END;
线

这是错误的。您试图使用来自游标的值,但事实上您使用的是字符串文字。要修复此错误,请删除引号:

EXECUTE IMMEDIATE 'drpInd.ES_DROP_INDEX_STMT';

此外,正如@XING所说,提交在这里是多余的。

Hi@GteckHan,如果您能在从db link插入后向我们展示表A中的数据,这将非常有帮助。我怀疑有什么东西插得不好。另外,如果您能告诉我们确切的错误将有所帮助。Hi@Ankit Mongia..完成编辑过程。我在第12 00900行的“ESSP.INSSEL_TBL_TEST”中点击了SQL错误:ORA-00900:无效SQL语句ORA-06512:。00000-“无效的SQL语句”我怀疑在使用dblink时insert语句中存在问题。不要将变量名放在单引号中<代码>立即执行“drpInd.ES_DROP_INDEX_STMT”应该是
立即执行drpInd.ES\u DROP\u INDEX\t如果语法不正确,请指出语法错误。@JeffreyKemp我用内联注释发布了整个代码,并删除了不必要的内容。在发表评论之前,你是否有时间仔细阅读了这些评论?这些评论并没有对我的答案产生更大的影响,而是更多的垃圾邮件。我不希望你命令我指出我需要做什么和不应该做什么。如果你认为你能回答得更好,你可以发布你有价值的答案。
EXECUTE IMMEDIATE 'drpInd.ES_DROP_INDEX_STMT';
EXECUTE IMMEDIATE drpInd.ES_DROP_INDEX_STMT;