一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数。该函数返回类型如'1,34,56'的字符串,并将该字符串作为存储过程的select的id条件。

beginDECLARE 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!

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

  1. mysql存储过参数拼接_mysql 存储过程动态拼接sql并执行赋值

    CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50)) BEGIN ## 定义变量 DECLARE _num FL ...

  2. mysql 存储过程中limit

    mysql 存储过程中limit 1.mysql的高版本(5.5),存储过程中的limit可以使用变量,如下:select * from student limit iStart,iNum; 2.my ...

  3. mysql存储过程中as_Mysql存储过程中的delimiter

    这个命令与存储过程没什么关系吧. 其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了. 默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束, ...

  4. linux mysql 存储过程乱码,mysql存储过程中 乱码问题解决办法

    中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题. 1.直接使用insert into语句没问题,能够正常插入汉字. 2.把insert into语句移到Procedu ...

  5. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  6. mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?

    我们可以使用游标来处理存储过程中的结果集.基本上,游标允许我们迭代查询返回的一组行并相应地处理每一行. 为了演示在MySQL存储过程中CURSOR的用法,我们基于以下名为" student_ ...

  7. MySQL存储过程中的3种循环

    MySQL存储过程中的3种循环 在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易 ...

  8. 存储过程中定义sql语句_学习SQL:用户定义的存储过程

    存储过程中定义sql语句 Stored procedures (SPs) are one more powerful database object we have at our disposal. ...

  9. mysql 存储过程中 if else的使用 和赋值方式

    mysql 存储过程中 if else的使用 和赋值方式 在mysql 中顶一个变量的语法 DECLARE variable_name datatype(size) DEFAULT default_v ...

  10. mysql中sql插入时间_mysql中使用sql语句插入日期时间类型的写法

    [例子如下: select * from ( select rownumber() over() as rownumber, id from associate ) as temp where row ...

最新文章

  1. 样本不均衡SMOTE算法代码实列
  2. 关系型数据库与NOSQL
  3. Python补充01 序列的方法
  4. 云漫圈 | 女生适合做程序员吗?
  5. 【PAT乙】1069 微博转发抽奖 (20分) set
  6. android 分辨率适配的方法
  7. 学习笔记-Bandit-WalkThrough
  8. 微软易升级服务器,通过“微软Windows10易升”升级Win10 1803全程图解
  9. Linux7(CentOs7.5)安装ssh、和修改ssh端口号
  10. LGTM,XGBOOST,LIGHTGBM
  11. halcon 缺陷检测 表面凸点检测
  12. 【沃顿商学院学习笔记】公益创业——01开始公益创业Starting a Social Enterprise
  13. Http请求体被转义
  14. 周易六十四卦——同人卦
  15. win10关闭任务栏窗口预览
  16. Linux中断——request_irq
  17. PyTorch之—可视化(Visdom/TensorboardX)
  18. 大写汉字转阿拉伯数字c语言,阿拉伯数字转换成中文大写数字
  19. .com域名到期 续费期和偿还期有什么区别?
  20. 微信认证年审 涉及支付 充值等信息 需要校验合同

热门文章

  1. JavaSE学习笔记--Item1 注解Annotation
  2. HTML——超文本标记语言(表单及12个表单元素)
  3. 来到博客园许久,却还未开始写一篇自己的博客。从今天开始,每周都会更新自己的学习内容。...
  4. J2SE基础夯实系列之正则表达式Java
  5. iOS xcode The certificate used to sign Administrator has either expired or has been revoked. An u
  6. jmeter接口测试json详解
  7. 第一次面试且失败的经历
  8. 介绍下Javascript原型和原型链的特点?
  9. Unity线程安全:CompareBaseObjectsInternal can only be called from the main thread
  10. TreeMap按照key排序