重建索引的Oracle触发器
如何在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,这是您永远都不想做的 如果需要重建索引,这应该作为标
create or replace
TRIGGER BI_NAME_SEARCH AFTER INSERT OR UPDATE ON PROFILE
FOR EACH ROW
BEGIN
ALTER INDEX MYINDEX REBUILD;
END;
这不起作用。您永远不想这样做:
- 您需要在系统表上放置触发器,这是您永远都不想做的
- 然后,您需要在触发器中动态执行DDL,这是您永远都不想做的
您永远不想这样做:
- 您需要在系统表上放置触发器,这是您永远都不想做的
- 然后,您需要在触发器中动态执行DDL,这是您永远都不想做的
为什么系统表上需要触发器?每当
profile
表中的数据发生变化时,它似乎都试图重建索引,这可能表明对如何维护索引存在根本性的误解;但是我缺少系统引用?要正确地执行此操作,您只需要在@Alex变得不可用时重建索引,因此您必须使用***$
(故意隐藏!)。我还没有考虑过你建议的方案。。。可能是这样的。啊,好吧,我没想过要检测出它不可用。是的,扣动扳机不是个好主意。谢谢。使用executeimmediate
成功创建触发器,正如我所说的,您应该重新考虑是否需要@user。我会问另一个问题,关于是否有更好的方法,包括需要这样做的原因的细节。为什么需要在系统表上使用触发器?每当profile
表中的数据发生变化时,它似乎都试图重建索引,这可能表明对如何维护索引存在根本性的误解;但是我缺少系统引用?要正确地执行此操作,您只需要在@Alex变得不可用时重建索引,因此您必须使用***$
(故意隐藏!)。我还没有考虑过你建议的方案。。。可能是这样的。啊,好吧,我没想过要检测出它不可用。是的,扣动扳机不是个好主意。谢谢。使用executeimmediate
成功创建触发器,正如我所说的,您应该重新考虑是否需要@user。我想问另一个问题,关于是否有更好的方法,包括您需要这样做的原因的细节。
execute immediate 'alter index myindex rebuild';