2

我刚刚创建了一个带有参数(示例 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);
4

1 回答 1

7

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

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子句的每一行调用。

于 2012-06-01T14:09:38.747 回答