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

sas*_*asi 2 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);
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 6

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

call sasi((select max(id) from sometable where somecondition));
Run Code Online (Sandbox Code Playgroud)

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

编辑:

如果要多次调用该过程,每行一次,请将您的过程更改为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
Run Code Online (Sandbox Code Playgroud)

然后像这样称呼它:

select sasi(id)
from table
where ...
Run Code Online (Sandbox Code Playgroud)

sasi(id)将匹配该where子句的每一行调用.