我刚创建了一个存储过程,该过程接受一个参数(示例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);
答案 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
。