在mysql存储过程中拼接sql解决in的字段类型不匹配问题


一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数。该函数返回类型如'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!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM