2012-10-02 48 views
1

我在DB2存儲過程中有一些SQL查詢,其中包含非常複雜的where子句,這些子句很難讀取,維護和無法在選擇語句之間共享,而無需粘貼&粘貼。我曾經寫過動態SQL,並將where子句的各個部分分開連接起來,至少使邏輯更清晰。 有沒有辦法做到這一點沒有動態SQL?我正在考慮用戶定義的函數,但它們太重且可能太慢。有任何想法嗎?分解where子句

+1

我不知道DB2。它支持視圖嗎?我認爲「分解哪些條款」可能是對目的意見服務的很好解釋。 –

回答

0

如果在查詢之前可以確定任何子句(即:根據傳遞給存儲過程的參數),則子句的結果可以存儲在變量中,然後在查詢中使用該變量。要與其他存儲過程共享,可以將其提取到單獨的存儲過程。

任何不基於存儲過程參數的子句都可以提取到視圖中。所有存儲過程都可以使用實際參數查詢視圖。請注意,這可能比單個SQL語句慢,特別是如果您可以在聯接之前顯着縮小表中的行數。

除此之外,我相信你堅持使用動態SQL或複製/粘貼。