任何想法?我今天問了"Is it possible to have a default parameter for a mysql stored procedure?"這個問題,答案是非常強烈的「不,這是不可能的」。您如何處理Mysql SP無法使用默認參數的事實?
所以我的下一個問題是,你是如何作爲一個PHP/MySQL開發人員處理這個問題?你是否傳遞null並且在SP中有一個IF變量,如果變量爲空則設置該變量?你在PHP中傳遞一個默認值嗎?
謝謝。
任何想法?我今天問了"Is it possible to have a default parameter for a mysql stored procedure?"這個問題,答案是非常強烈的「不,這是不可能的」。您如何處理Mysql SP無法使用默認參數的事實?
所以我的下一個問題是,你是如何作爲一個PHP/MySQL開發人員處理這個問題?你是否傳遞null並且在SP中有一個IF變量,如果變量爲空則設置該變量?你在PHP中傳遞一個默認值嗎?
謝謝。
這裏有一個解決方案,使用COALESCE()
設置一個局部變量的值在存儲的過程:
DELIMITER !!
CREATE PROCEDURE dflt (IN param1 INT)
BEGIN
DECLARE param1_dflt INT DEFAULT 456
SET param1_dflt = COALESCE(param1, param1_dflt);
SELECT param1_dflt;
END!!
DELIMITER ;
CALL dflt(123);
+-------------+
| param1_dflt |
+-------------+
| 123 |
+-------------+
CALL dflt(NULL);
+-------------+
| param1_dflt |
+-------------+
| 456 |
+-------------+
這應該由數據庫處理,而不是調用腳本。如果您無法定義默認參數,則傳遞NULL
值並讓存儲過程執行默認設置。
可選參數定爲MySQL 6.
你最簡單的選擇是要麼寫一個包裝,增加了默認值,或者爲每個案件的程序。
我會考慮你使用存儲過程的原因。在絕大多數情況下,它們幾乎沒有什麼好處,因爲可以在應用層執行抽象,並且減少網絡流量通常是最不關心的問題。當然,這取決於你的應用程序。
MySQL 6並不意味着它與以前一樣;他們改變了所有未來的版本號碼。你能編輯你的答案,並且包含一個鏈接來引用MySQL已經公佈計劃來支持這個功能嗎?我在bugs.mysql.com找不到與它有關的任何東西。 – 2009-06-12 00:05:54
那只是插入 – Matt 2009-06-11 23:57:06
什麼是唯一真正的插件中的真實?我是在表達我的意見,而不是陳述事實...... – ninesided 2009-06-12 00:57:46