Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重建索引的Oracle触发器_Oracle_Triggers - Fatal编程技术网

重建索引的Oracle触发器

重建索引的Oracle触发器,oracle,triggers,Oracle,Triggers,如何在Oracle中创建触发器以重建索引 create or replace TRIGGER BI_NAME_SEARCH AFTER INSERT OR UPDATE ON PROFILE FOR EACH ROW BEGIN ALTER INDEX MYINDEX REBUILD; END; 这不起作用。您永远不想这样做: 您需要在系统表上放置触发器,这是您永远都不想做的 然后,您需要在触发器中动态执行DDL,这是您永远都不想做的 如果需要重建索引,这应该作为标

如何在Oracle中创建触发器以重建索引

create or replace  
 TRIGGER BI_NAME_SEARCH AFTER INSERT OR UPDATE ON PROFILE
FOR EACH ROW  
BEGIN  
   ALTER INDEX MYINDEX REBUILD;  
END;

这不起作用。

您永远不想这样做:

  • 您需要在系统表上放置触发器,这是您永远都不想做的
  • 然后,您需要在触发器中动态执行DDL,这是您永远都不想做的
如果需要重建索引,这应该作为标准系统维护的一部分来完成,而不是在运行中。如果您需要动态地重建索引,那么您正在做一些使索引不可用的事情。不管这是什么,都不要做。解决问题的根本原因,而不是症状

要真正回答您的问题(再次不要这样做),您需要使用动态DDL以便在PL/SQL中执行DDL。使用


您永远不想这样做:

  • 您需要在系统表上放置触发器,这是您永远都不想做的
  • 然后,您需要在触发器中动态执行DDL,这是您永远都不想做的
如果需要重建索引,这应该作为标准系统维护的一部分来完成,而不是在运行中。如果您需要动态地重建索引,那么您正在做一些使索引不可用的事情。不管这是什么,都不要做。解决问题的根本原因,而不是症状

要真正回答您的问题(再次不要这样做),您需要使用动态DDL以便在PL/SQL中执行DDL。使用


为什么系统表上需要触发器?每当
profile
表中的数据发生变化时,它似乎都试图重建索引,这可能表明对如何维护索引存在根本性的误解;但是我缺少系统引用?要正确地执行此操作,您只需要在@Alex变得不可用时重建索引,因此您必须使用
***$
(故意隐藏!)。我还没有考虑过你建议的方案。。。可能是这样的。啊,好吧,我没想过要检测出它不可用。是的,扣动扳机不是个好主意。谢谢。使用
executeimmediate
成功创建触发器,正如我所说的,您应该重新考虑是否需要@user。我会问另一个问题,关于是否有更好的方法,包括需要这样做的原因的细节。为什么需要在系统表上使用触发器?每当
profile
表中的数据发生变化时,它似乎都试图重建索引,这可能表明对如何维护索引存在根本性的误解;但是我缺少系统引用?要正确地执行此操作,您只需要在@Alex变得不可用时重建索引,因此您必须使用
***$
(故意隐藏!)。我还没有考虑过你建议的方案。。。可能是这样的。啊,好吧,我没想过要检测出它不可用。是的,扣动扳机不是个好主意。谢谢。使用
executeimmediate
成功创建触发器,正如我所说的,您应该重新考虑是否需要@user。我想问另一个问题,关于是否有更好的方法,包括您需要这样做的原因的细节。
execute immediate 'alter index myindex rebuild';