2009-06-11 42 views
2

任何想法?我今天問了"Is it possible to have a default parameter for a mysql stored procedure?"這個問題,答案是非常強烈的「不,這是不可能的」。您如何處理Mysql SP無法使用默認參數的事實?

所以我的下一個問題是,你是如何作爲一個PHP/MySQL開發人員處理這個問題?你是否傳遞null並且在SP中有一個IF變量,如果變量爲空則設置該變量?你在PHP中傳遞一個默認值嗎?

謝謝。

回答

4

這裏有一個解決方案,使用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 | 
+-------------+ 
0

這應該由數據庫處理,而不是調用腳本。如果您無法定義默認參數,則傳遞NULL值並讓存儲過程執行默認設置。

+0

那只是插入 – Matt 2009-06-11 23:57:06

+0

什麼是唯一真正的插件中的真實?我是在表達我的意見,而不是陳述事實...... – ninesided 2009-06-12 00:57:46

1

可選參數定爲MySQL 6.

你最簡單的選擇是要麼寫一個包裝,增加了默認值,或者爲每個案件的程序。

我會考慮你使用存儲過程的原因。在絕大多數情況下,它們幾乎沒有什麼好處,因爲可以在應用層執行抽象,並且減少網絡流量通常是最不關心的問題。當然,這取決於你的應用程序。

+0

MySQL 6並不意味着它與以前一樣;他們改變了所有未來的版本號碼。你能編輯你的答案,並且包含一個鏈接來引用MySQL已經公佈計劃來支持這個功能嗎?我在bugs.mysql.com找不到與它有關的任何東西。 – 2009-06-12 00:05:54

相關問題