我正在查看存儲過程。[MySQL]:存儲過程和選擇語句
根據this文章(第8頁)在MySQL網站的開發部分...
通常情況下,這是不正常的把 SELECT語句中存儲 過程,這是爲了說明。 我決定,有些程序應 簡單地從我們的表中選擇,這樣 當你調用過程將是 明顯,它的工作。
這是爲什麼?
正在使用存儲過程來簡化複雜的選擇語句而不是「最佳實踐」?
什麼是一些有利於使用存儲過程的特定情況?例?
我正在查看存儲過程。[MySQL]:存儲過程和選擇語句
根據this文章(第8頁)在MySQL網站的開發部分...
通常情況下,這是不正常的把 SELECT語句中存儲 過程,這是爲了說明。 我決定,有些程序應 簡單地從我們的表中選擇,這樣 當你調用過程將是 明顯,它的工作。
這是爲什麼?
正在使用存儲過程來簡化複雜的選擇語句而不是「最佳實踐」?
什麼是一些有利於使用存儲過程的特定情況?例?
通常存儲過程旨在用於數據庫中的複雜處理。有關他們的好處的爭論正在激化。我從來沒有看到存儲過程中的SELECT是一件壞事,但我不希望每個必須寫入的SQL語句都進入存儲過程。它應該保留給涉及多個語句的處理,並且必須重複執行。
傑夫有關於他們的here咆哮。
爲了回答您的具體實例直接的問題,我發現,我避免了因便攜性問題的他們。我試圖完成我所有的處理應用程序。同時,我不必擔心應用程序中的網絡帶寬,因此每種情況都不相同。
的具體情況,其中,有利的是使用存儲程序/例程是,它可以提供錯誤在OO模式類似功能的參數檢查。它給加「封裝」
一個簡單的例子:
CREATE PROCEDURE select_table(IN @id INT)
BEGIN
IF @id < O THEN
-- ERROR! do something here
ELSEIF
SELECT * from TABLE WHERE id = @id;
END IF
END
注意。絕對是一個非常強大的功能。 – 2010-01-21 20:00:05
我的印象是,存儲過程的地方更便攜比應用驅動的查詢。就目前而言,您可以將查詢邏輯與應用程序分開。 – 2010-01-21 19:44:22
但它們是用DBMS自己的語言編寫的。 SQL Server的存儲過程是用T-SQL和PL/SQL中的Oracle編寫的。不能將數據庫從一個平臺移動到下一個平臺。對於一些沒有什麼大不了,但對其他人來說...... – 2010-01-21 20:00:31
絕對真實......從一個數據庫系統到下一個數據庫系統的可移植性是有風險的。我鏈接的pdf概述了一些特定於mysql的語法/特性(以及其他一些約定),爲了維護基於非mysql的數據庫的兼容性問題,您應該避免使用這些語法/特性。但是,如果我沒有弄錯,存儲過程便於從一種語言移植到另一種語言。 – 2010-01-21 20:32:31