将条件合并到一个地方

时间:2011-10-04 10:17:14

标签: sql database oracle plsql cursor

有两个功能:一个返回具有某些任务的工人的记录,另一个返回特定工作人员的任务。这两个函数在WHERE子句中具有相同条件的游标。

我的问题是,如何在一个地方定义这些条件?然后我的代码不会中断DRY principle

提前致谢!

P.S。:我不想使用REF CURSORS因为它们不可靠。

2 个答案:

答案 0 :(得分:4)

我认为DRY(不要重复自己)是一个明智的经验法则是三角测量:如果三个地方存在相同的逻辑,那么将其提取到自己的模块中是值得的。但如果只存在于两个地方,请不要理会。

然而,你并没有真正重复自己,是吗?你所拥有的是两个不同的查询返回两个不同的结果集(一个是WORKERS,另一个是TASKS),恰好碰巧有一些WHERE子句的共同点。这不是正确的重复。

如果你试图根除一行中两行代码执行相同操作的单个实例,那么最终将会出现一个非常难以理解且无法维护的程序。请记住,DRY是由Andy Hunt and Dave Thomas制定的,他们称自己是实用程序员,这是一个很好的理由:明智地应用这个原则并理解你为什么要这样做,而不是盲目地遵循教条。

答案 1 :(得分:3)

解决您对REF CURSOR的保留问题,为什么您认为它们不可靠?我从来没有遇到任何问题。什么可能让你感到悲伤是使用动态SQL来填充ref游标。但这是尝试删除虚构重复的功能,与使用游标变量无关。