2014-07-27 74 views
1

我正在尋找靈活的更新存儲過程。我做了這個。 當我打電話給這個CALL spUpdatePage(1,'a','b','c''d')它工作正常。靈活的更新存儲過程Mysql

我必須在這個例子中總是傳遞5個參數嗎?

可我也做到這一點

CALL spUpdatePage(1,'a','c') 

和存儲過程都知道,我只是想更新的列的名稱和說明?

CREATE DEFINER=`root`@`localhost` PROCEDURE `spUpdatePage`(
IN `pKey` INT(4), 
IN `name` VARCHAR(255), 
IN `title` VARCHAR(255), 
IN `description` VARCHAR(255), 
IN `keywords` VARCHAR(255)) 
UPDATE 
    pages 
SET 
    name = COALESCE(name, name), 
    title = COALESCE(title, title), 
    description = COALESCE(description, description), 
    keywords = COALESCE(keywords, keywords) 
WHERE 
    id = pKey 
+0

可能重複(http://stackoverflow.com/questions/982798/is-it-possible-to-have -a-default-parameter-for-a-mysql-stored-procedure) – RandomSeed

回答

1

我必須在這個例子中5個PARAMS總是傳遞?

我也可以這樣做嗎?

CALL spUpdatePage(1,'a','c') 

爲您發佈的存儲過程,你必須通過所有5個參數。不,你不能只通過namedescription(到你的發佈存儲過程)。但是,您可以編寫僅更新namedescription的存儲過程。喜歡的東西,

CREATE DEFINER=`root`@`localhost` PROCEDURE `spUpdatePageNameTitle`(
    IN `pKey` INT(4), 
    IN `name` VARCHAR(255), 
    IN `title` VARCHAR(255)) 
UPDATE 
    pages 
SET 
    name = COALESCE(name, name), 
    title = COALESCE(title, title) 
WHERE 
    id = pKey 
的[是否有可能有一個MySQL存儲過程的默認參數?]
+0

我的愚蠢問題。沒有工作。所以存儲過程不靈活...所以你必須始終發佈所有參數... Thnx! – Bas

+0

@Bas另請參閱[這個問題和答案](http://stackoverflow.com/a/982824/2970947)。 –