2010-09-27 77 views
1

(当我找出答案时,我已经写下了这个问题,所以我会发布它,因为Google没有给我任何有用的答案)。Oracle - 在SELECT上模拟触发器

我正在寻找创建非常类似于在Oracle SELECT上触发的触发器的东西。目标是从SELECT的结果中删除特定的行,具体取决于哪个用户正在执行SELECT。

这需要在Oracle 11g(不是Enterprise)的标准版本上运行,所以我没有访问行级别安全性或细粒度审计的权限。

我有一个现有的(非常)传统的具有嵌入式应用数千选择所有的地方,所以最好我不希望有改变每一个...

我的表m看起来工作有一百万行,这在一定程度上限制了我的表现。

+0

干得好。然而,这个问题与触发器无关。你只是想控制查询的结果 - 因此最适合的解决方案是你创建的视图。 – 2010-09-28 05:55:30

回答

2

由于我只是真的想修改1个特定表上的选择,所以我的答案是重命名现有表并使用原始名称创建视图。

+0

然后,您必须在视图上创建INSTEAD OF INSERT和DELETE触发器以保持兼容性。 – Benoit 2010-09-27 11:08:49

+0

@Benoit - 不一定。一个简单的视图只是从表中过滤出行,通常会在Oracle中更新。尽管可以创建一个视图来过滤掉不可更新的行,在这种情况下触发器是必需的,但您可能需要执行一些操作,例如非键保留连接到另一个表,以便成为问题。 – 2010-09-27 15:04:19

+0

@Justin Cave你是对的。在我的情况下,视图非常简单 - 看起来像'select * from emp where()'。它是可更新的。 – 2010-09-27 16:21:52

0

我认为,如果PL SQL块中的条件可以解决您的问题,那么很简单。

+0

当然。但是我正在维护一个非常大的应用程序 - 实际上是一个巨大的应用程序和几个较小的应用程序 - 并且有数百个,可能有数千个访问此表的地方。如果我要为所有人添加我的简单条件,我会在我完成之前发疯或退休:) – 2010-09-27 16:24:45