zoukankan      html  css  js  c++  java
  • 在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!

  • 相关阅读:
    SANBA服务和FTP服务
    rpm和yum软件管理
    Linux进程管理
    Linux网络技术管理
    RAID磁盘阵列及CentOS7启动流程
    Linux磁盘管理及Lvm
    Linux计划任务及压缩归档
    Linux权限管理
    Linux用户及用户组管理
    vim 编辑器
  • 原文地址:https://www.cnblogs.com/thingk/p/6930813.html
Copyright © 2011-2022 走看看