对于存储过程或者函数,有时有这样的一个需求,传递一个参数,输出一个结果。如:我传递一个账号,返回这个账号所拥有的权限。但是如果这个需求改了,我要传递少量的复数个账号,获取这些账号权限,但是账号的个数不限定,则此时需要用关键字IN,并将账号集合传递给存储过程或函数。实现的过程如下: 对表oasys_dept,有如下的数据:
需要输入参数id(INT形式),调用存储过程得到结果。 MYSQL实现(使用方法find_in_set):
DELIMITER $$
CREATE PROCEDURE query_company(IN cname_in VARCHAR(100), OUT result_out INT)
BEGIN
SELECT count(*) INTO result_out FROM oasys_dept where find_in_set(id, cname_in);
END
$$
DELIMITER ;
调用存储过程
set @ids='1,2';
set @recordcount=0;
CALL query_company(@ids, @recordcount);
SELECT @recordcount;
结果:
这里id是INT类型的,那如果换成字符串类型,我是不是需要像sqlserver一样传递'key1','key2'这样带有多对单引号格式的参数呢?这里把参数由主键集合改成dept_name集合试试:
DELIMITER $$
CREATE PROCEDURE query_company(IN cname_in VARCHAR(100), OUT result_out INT)
BEGIN
SELECT count(*) INTO result_out FROM oasys_dept where find_in_set(dept_name, cname_in);
END
$$
DELIMITER ;
调用存储过程:
set @ids='家里蹲有限公司,野鸡公司';
set @recordcount=0;
CALL query_company(@ids, @recordcount);
SELECT @recordcount;
效果一样。也就是说,实际操作的时候,不需要传递'key1','key2'这样格式的参数给存储过程,而是'key1,key2'这样的格式,这种形式似乎与sqlserver略不同。