| 
 一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数。该函数返回类型如'1,34,56'的字符串,并将该字符串作为存储过程的select的id条件。  
 
 begin
    DECLARE my_id integer(10);
    set @var = func_name();
    // var = '1,456';
    select id into @my_id from student where id in(@var);
    return @my_id;
end; 
  
select语句in里的是函数返回的带引号的字符串,而系统表里id字段是整形,所以需要拨去单引号。  
方法有三:  
1. 直接把函数返回作为子查询,  
 
 select id into @my_id from student where id in(select * from func_name);  
  
2. 在存储过程拼接sql  
 
 BEGIN
    #Routine body goes here...
set @var = func_name();
set @sql = CONCAT('select id,name from student where id in(',@var,')');
PREPARE stmt from @sql;
EXECUTE stmt;
END 
  
3. 拆分存储过程  
将存储过程拆分,在前端java里分开执行,第一步执行函数,拿到结果在java里拼接不带引号的sql in语句即可。  
ok!  |