考虑哪里的条款

时间:2012-10-02 15:22:21

标签: sql refactoring db2 where

我在DB2存储过程中有一些SQL查询,其中包含很复杂的where子句,这些子句难以阅读,维护,并且无需复制和粘贴就无法在select语句中共享。我曾经写过动态SQL并将where子句的各个部分分开连接起来,至少使逻辑更清晰。 有没有办法在没有动态SQL的情况下执行此操作?我正在考虑用户定义的函数,但它们太重量级,可能太慢了。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果在查询之前可以确定任何子句(即:基于传递给存储过程的参数),则该子句的结果可以存储在变量中,然后只在查询中使用该变量。要与其他存储过程共享,可以将其提取到单独的存储过程。

可以将任何不基于存储过程参数的子句提取到视图中。然后,所有存储过程都可以使用实际参数查询视图。请注意,这可能比单个SQL语句慢,特别是如果您可以在连接之前显着缩小表中的行。

除此之外,我相信您仍然无法使用动态SQL或复制/粘贴。