MYSQL存储过程实现in传入参数 where in('1','2')

android 服务器端开发中遇到这么一个问题:

突然发现将字符串传入到存储过程,参数为 ‘1‘,‘2‘  ,竟然执行无效

所以看到网上有在存储过程中直接拼凑sql的代码,今天也试了一下,可以执行了,代码如下:

CREATE DEFINER = ‘abc‘@‘%‘
PROCEDURE ConfirmAcceptorListProc(in p_task_id varchar(20),in p_user_ids text,out p_msgtype varchar(20),out p_msg varchar(20))
begin
  DECLARE m_user_ids varchar(1000);
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
  SET @SEL=‘update go_task_acceptor set status =\‘2\‘ where status = \‘1\‘ AND task_id = \‘‘;
  set @sentence = concat(@sel,p_task_id,‘\‘ AND acceptor_id in (‘,p_user_ids,‘);‘); -- 连接字符串生成要执行的SQL语句
  prepare stmt from @sentence; -- 预编释一下。 “stmt”预编释变量的名称,

  START TRANSACTION;
  execute stmt; -- 执行SQL语句
  select row_count() into p_msg;
  if t_error = 1 then
      ROLLBACK;
      set p_msgtype = ‘-1‘;
  else
      COMMIT;
      set p_msgtype = ‘1‘;
  end if;
deallocate prepare stmt; -- 释放资源

end

以上存储过程里面拼凑出来的sql代码是:

update go_task_acceptor set status =‘2‘ where task_id = p_task_id and status = ‘1‘ and  acceptor_id in (‘s‘,‘4‘);

MYSQL存储过程实现in传入参数 where in('1','2')

时间: 2024-11-29 09:35:07

MYSQL存储过程实现in传入参数 where in('1','2')的相关文章

mybatis 调用mysql存储过程 带输出输入参数

http://lohasle.iteye.com/blog/1669879 存储过程都是一样的,只是根据自己的喜好,可以用MAP或者JAVABEAN传递参数. Sql代码   -- -------------------------------------------------------------------------------- -- Routine DDL -- Note: comments before and after the routine body will not be

mysql存储过程调用含out参数

mysql 数据库有以下存储过程: CREATE DEFINER=`root`@`localhost` PROCEDURE `hovertreeTest`( IN `Param1` INT, IN `Param2` VARCHAR(50), OUT `Param3` INT ) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '测试' BEGIN select param1; select para

mysql存储过程实例,查询多参数赋值

drop procedure if exists p_for_create_customer; create procedure p_for_create_customer()begin declare ii int default 0; declare i int default 1; declare minss int default 0; declare idd int; declare start_d datetime; declare channel_code_ VARCHAR(255

Oracle存储过程根据传入参数查询

Oracle存储过程中根据传入参数查询时无效 环境:Oracle11g 需求:根据传入的参数作为条件,查询相关数据 问题:条件无效 代码: create or replace procedure XXX(associatedId in varchar,typeinfoid in varchar) as sheetcontent clob; begin select wm_concat(t.datasource) into sheetcontent from xly_associatedorder

MySQL 存储过程实例

文件:MySQL存储过程.rar大小:467KB下载:下载MySQL 5.0以后的版本开始支持存储过程,存储过程具有一致性.高效性.安全性和体系结构等特点,本节通过具体的实例讲解PHP是如何操纵MySQL存储过程的.实例说明 为了保证数据的完整性.一致性,提高应用的性能,常采用存储过程技术.MySQL 5.0之前的版本并不支持存储过程,随着MySQL技术的日趋完善,存储过程将在以后的项目中得到广泛的应用.本实例将介绍在MySQL 5.0以后的版本中创建存储过程.技术要点 一个存储过程包括名字.参

MySQL 存储过程传参之in, out, inout 参数用法

存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..) in :给参数传入值,定义的参数就得到了值 out:模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程(在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值) inout:调用者还可以通过 inout 参数传递值给存储过程,也可以从存储过程内部传值给调用者 如果仅仅想把数据传给 MySQL 存储过

MySQL 存储过程参数用法 in, out, inout

MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible). drop procedure if exists pr_param_in; create procedure pr_param_in ( in id int

Mysql存储过程包含事务,且传入sql数据执行

有一个需求是:在一个图片按钮上点击,在按钮的上方弹出一个弹框,根据弹框的内容页面做不同的显示.这个其实没什么难的,主要是要控制好弹框的显示位置,让弹框显示在图片的正上方的中间. 一开始是用的Popupwindow,但是Popupwindow不能给弹窗之外的页面加一个半透明的蒙层,当然可以在页面上加一个专门的作为蒙层的View,但是很显然,这么做会代码变得很恶心,于是又换成了Dialog,因为Dialog弹出的时候会自动加一个蒙层的,但是这个时候,弹框显示位置的Y坐标不对了,后来一顿查,原来Dia

Mysql存储过程包括事务,且传入sql数据运行

有这样一个需求.要求在mysql存储过程中使用到事务,并且运行的是动态的sql语句 代码例如以下: BEGIN DECLARE in_data TEXT; /** 标记是否出错 */ DECLARE errno INT DEFAULT '0'; /** 假设出现sql异常.则将t_error设置为1后继续运行后面的操作 */ DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK;SET errno = 1; END; START TRA