簡體   English   中英

使用字符串生成器或存儲過程進行單行選擇

[英]Single line select using string builder or Stored Procedure

我的應用程序中有很多單行選擇查詢,其中包含跨越 5-6 個表的多個連接。 這些查詢是基於許多條件生成的,這些條件基於使用字符串構建器的表單等輸入。 然而,我的團隊負責人恰好是 sql 開發人員,他要求我將這些單行查詢轉換為存儲過程。

將單行選擇查詢轉換為后端並執行所有 if 和 else 作為 SP 是否有任何優勢。

在存儲過程中包含所有 sql 部分的一個優點是,您將查詢保存在一個地方,即數據庫,這樣更改或修改就會容易得多,而無需在應用程序層或前端層進行大量更改。

此外,如果 SQL 存儲在數據庫過程中,DBA 或 SQL 開發人員可以微調 SQL。 您可以將所有函數/存儲過程保存在一個包中,這在性能和組織對象方面會更好(在 Java 中創建包的類似方式)。 當然,在包中,您可以限制對其對象的直接訪問。

這更多是團隊或部門政策,無論是在前端還是在數據庫本身中保留 sql 部分,當然就像@Gimby 提到的那樣,很多人可能會有不同的看法。

更新 1

如果您有一個返回某些內容的 select 語句,請使用函數,如果您有 INSERT/UPDATE/DELETE 或類似的東西,例如發送電子郵件或其他業務規則,則使用一個過程並通過傳遞參數從前端調用它們。

恐怕這個問題會根據許多不同的個人意見產生許多不同的答案。

無論如何,您在這里談論的業務邏輯在 - 我 - 中屬於應用程序層。 但我認識一整個 Oracle 開發者俱樂部,他們完全不同意我的觀點。

如果您在 Java 中使用 PreparedStatement,那么 Java 查詢和存儲過程之間的性能沒有很大差異。 (如果你在java中使用Statement,那么你就有問題了)。

但是存儲過程是組織和重用 sql 代碼的好方法。 您可以將它們分組在包中,您可以在沒有 Java 編譯的情況下更改它們,並且您的 DBA 或 SQL 專家可以調整它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM