2013-10-11 28 views
0

是否有可能在mysql中創建自定義函數,如SUM,MAX等......它接受多列並在每一行上執行一些操作?在多列上運行的mysql函數

我問這個問題的原因是因爲我試圖做我的邏輯使用存儲過程,但不幸的是無法找到一種方式如何從表名稱中選擇數據表的名稱是輸入參數。

有人建議使用動態SQL,但我不能得到遊標。所以我唯一的希望就是使用自定義函數。

提前10倍。

P.S.

爲了讓這裏的問題更加清晰是我想做的事:

我想計算路線的距離,其中在數據庫表中的每一行代表座標(緯度經度和)。不幸的是,我擁有的數據非常大,如果我查詢數據並使用java執行計算,則需要半分鐘以上才能將數據傳輸到Web服務器,因此我想在SQL計算機上執行計算。

+0

是否有理由在檢索數據後無法處理數據? – Populus

+0

_「像SUM,MAX等。」_ - 究竟是什麼「等等」?對於SUM來說,將每列求和並將這些總和相加是非常容易的,並且可以使用GREATEST()...確定幾個MAX值的最大值,並且光標與此有關以及它是如何成爲問題的我不清楚。 – CBroe

+0

這聽起來像你可能想[創建一個存儲函數](http://dev.mysql.com/doc/en/create-function.html),但沒有進一步的細節,它是不可能確定... – eggyal

回答

0

選擇something1,從TABLE_NAME something2這裏表名是一個變量

多個相同結構表(這種查詢的先決條件)是背道而馳的Principle of Orthogonal Design

不要做。至少不是沒有非常有用好理由—帶有合適的索引,每張表的數十萬條記錄很容易讓MySQL處理,而不需要任何分區;即使一個需要對數據進行分區,有better ways比本手冊雜牌(這可能會引起歧義,可能不一致的數據,並導致冗餘和複雜性在你的數據操作的代碼)。

+0

我不知道你是否理解我,但我不想等30秒來選擇所有數據,然後計算它只是爲了得到一個雙倍的價值! –

+0

@JoroSeksa:是的,我瞭解你。我認爲你不瞭解我。我告訴你,你當前的模式是一個壞主意*,你應該投資適當的*索引*你的數據和/或*本地*根據需要劃分你的表。既然你的問題沒有包含任何具體的細節,你可以自己研究這些想法,如果你對如何實現它們有疑問,就會回來。 – eggyal

+0

請不要告訴我一些理想的想法。不管你做什麼或優化問題,當你通過網絡查詢大數據時,事情變得非常緩慢,所以唯一的解決方案就是在sql server上進行計算並得到你需要的結果 –