在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