Oracle
從 Oracle SQL 函式中抽像出過濾行為
我有一個 Oracle SQL 函式,它通過各種子查詢返回一堆記錄。但是,有無數過濾器可以應用於這些結果記錄。
在應用程序程式語言中,我可以通過允許我的函式使用函式參數來抽象過濾行為,即 JS 中的回調或 Java 中的功能介面對象。
另一種可能性是具有可選參數或函式重載,但對於不同的過濾需求,它仍然不可擴展。此外,它不適用於儲存過程或函式。
我是編寫 SQL 過程和函式的新手,所以我想知道除了使用應用程序程式語言之外還有其他選擇嗎?
回調完全違背了 SQL 背後的想法。它被設計為聲明性語言,查詢描述任務,查詢優化器建構排序、索引查找、合併等組合以滿足查詢。回調沒有任何逐行處理。
Oracle 支持重載,但有限制http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/subprograms.htm#sthref1738你怎麼看它不起作用?您必須將重載的子程序放入包中,但無論如何這是建構 Oracle 端軟體的非常合理的方式,無論是否重載。但我同意,它對無數的過濾器選項幾乎沒有幫助。
是的,應用程序是根據多個使用者選擇建構 SQL 查詢的最佳位置(按價格和顏色過濾,或按年份和品牌,…)。