我们在Oracle中将一些“参数化视图”分层了在Oracle中的某些常规视图中划分了一些“参数化视图”,以便正确鼓励谓词始终在查询中使用。

重复码(适当加入的表)将在视图中,因此我们将不再具有许多不同的程序和功能,并使用自己的公共连接和过滤器副本。

然后我们将在这些视图上划分流水表函数以确保呼叫者提供必要的过滤器,以便观点未被调用“所有时间和空间”。我已经查看了使用sys_context和userenv和包变量的替代方案,虽然它们似乎是Oracle用户呼叫参数化视图,但每次使用时都不是在视图周围有那些垫片,而且它们不可重复使用自我连接。

我在各种地方读了很多关于这个的东西,包括stackoverflow:

在Oracle 11g中的函数? (参数化视图)

数据库:流水线功能

正在使用选择允许流水线PL / SQL表功能?

这是试图提高应用程序的可维护性的架构决定,该应用程序已经倾斜了很多重复的查询。观点将有一些方法来帮助,但我担心我们无法对呼叫者执行谓词来阻止他们做愚蠢的事情。

我在SQL Server中使用了具有内联表值函数的技术进行了大量的成功,它真的有助于使系统更加连贯,更容易跟踪所提出的变化的依赖性和效果,因为有一个)较少的代码和b)更重复使用和更少的重复。

我有点担心最后一个链接,似乎暗示我可能会有并发或时间问题如果我加入其中一个流水线表函数并用它来更新另一个表。

请与流水线表功能分享您的体验以及我需要注意的是什么?还有如果有更好的替代方案,请告诉我在答案中?

有帮助吗?

解决方案

是,在流水线函数内查询表的点立时间行为与直接或通过视图查询表的不同之处不同,以便需要考虑。也就是说,如果流水线函数正在查询一个不经常更新的表,则这不是一个问题。我想不出任何并发或时间问题。

我的主要问题对于为开发人员提供使用的流水线功能(与使用视图相反),是它们(如某些视图)可能很容易误用。开发人员可以选择将一个流水线功能的结果与另一个流水线函数加入另一个流水线功能,从而导致非常低效的查询,无法利用索引,推送谓词和表约束等内容。

如果可维护性是您的主要问题,那么我会更喜欢查看 - 它们可以通过在一个地方定义共同的变换来帮助减少重复的代码,也许是共同的联接;然而,即使这些也太容易误用了(例如,加入视图,即使它加入原始查询不需要的另一个表)。

性能和效率,可能是要注意的东西。为申请中的所有SQL进行严格的审查制度,以寻找疑问或不一致的疑问。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top