灵活更新存储过程Mysql

时间:2014-07-27 07:07:13

标签: mysql sql stored-procedures

我正在寻找灵活的更新存储过程。我做了这个。 当我调用这个CALL spUpdatePage(1,'a','b','c''d')时它工作正常。

我必须总是在这个例子中传递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

1 个答案:

答案 0 :(得分:1)

  

我必须在这个例子中总是传递5个参数吗?

     

我也可以这样做吗?

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