2011-10-04 58 views
1

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

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

在此先感谢!

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

+1

投票结束,您需要提供比这更多的细节,我们不是mindreaders。 – Johan

+0

请你能告诉我们两个函数的代码吗? – MatBailie

+0

@Johan--你不需要成为一名思维导报员,了解他们在做什么,尽管显然这不是一个以英语为母语的人的工作。 – APC

回答

4

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

但是,你并没有真正重复自己,是吗?你有什么是两个不同的查询返回两个不同的结果集(一个是WORKERS另一个是TASKS),它们恰好有一些他们的WHERE子句的共同点。这不是适当的重复。

如果您试图根除所有单行实例,其中两行代码执行相同的操作,那么您最终将得到一个可怕的无法读取和不可维护的程序。请记住,DRY是由Andy Hunt and Dave Thomas制定的,他们自称为务实程序员,原因很明显:明智地应用该原则并理解你为什么这样做,而不是盲目追随教条。

3

解决您对REF CURSOR的保留意见,为什么您认为它们不可靠?我从来没有遇到任何问题。什么可能会给你带来悲痛的是使用动态SQL来填充ref游标。但是这是一个试图去除虚构重复的函数,并且与使用游标变量本身无关。