将查询结果作为参数的存储过程

时间:2012-06-01 13:05:22

标签: mysql stored-procedures

我刚创建了一个存储过程,该过程接受一个参数(示例id)并将与该id相关的列从一个表复制到另一个表。 如何创建以子查询结果为参数的存储过程,数据库为mysql ..

这是我的例子..我想传递从表到程序选择id的查询..

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sasi`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sasi`(IN idno int(4))

    BEGIN
    INSERT INTO user5(id,email,address,fullname,gender,phonenumber)
    SELECT id,email,address,fullname,gender,phonenumber FROM user1  where id != idno;
    END$$

DELIMITER ;

call sasi(4);

1 个答案:

答案 0 :(得分:6)

要将查询结果传递到存储过程,请将查询括在括号中 例如:

call sasi((select max(id) from sometable where somecondition));

您必须确保查询仅返回一行和一列。

编辑:

如果您想多次调用该过程,每行一次,请将您的过程更改为FUNCTION

CREATE FUNCTION sasi(idno int(4))
RETURNS int(4)
BEGIN
    INSERT INTO user5(id,email,address,fullname,gender,phonenumber)
    SELECT id,email,address,fullname,gender,phonenumber FROM user1  where id != idno;
    RETURN idno;
END

然后这样称呼:

select sasi(id)
from table
where ...
对于匹配sasi(id)子句的每一行,都会调用

where