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!

  • 相关阅读:
    十六进制内存赋值
    opcode修改
    C/C++ strtok函数
    pat1033. To Fill or Not to Fill (25)
    pat1008. Elevator (20)
    pat1089. Insert or Merge (25)
    pat1091. Acute Stroke (30)
    pat1002. A+B for Polynomials (25)
    pat1090. Highest Price in Supply Chain (25)
    pat1088. Rational Arithmetic (20)
  • 原文地址:https://www.cnblogs.com/thingk/p/6930813.html
Copyright © 2011-2022 走看看