mysql 存储过程动态执行sql 例子

DELIMITER $$;
DROP PROCEDURE IF EXISTS `set_col_value`$$
CREATE  PROCEDURE `set_col_value`
   (InTargetYear     VARCHAR(128), 
        InTargetWeek     VARCHAR(128),
        InCurrentYear    VARCHAR(1000),
        InCurrentWeek    VARCHAR(4000)
    )
BEGIN
   DECLARE sql_str TEXT;
   SET sql_str = CONCAT('INSERT INTO     res_sales_hotlead(group_id,sales_id,customer_id,year,WEEK,createuser,createtime)SELECT t.group_id,t.sales_id,t.customer_id,',InTargetYear,',',InTargetWeek,',','t.createuser,NOW() FROM res_sales_hotlead t WHERE t.year = ',InCurrentYear,' AND t.week = ',InCurrentWeek,'');
   
    SET @SQL=sql_str;
	   PREPARE s1 FROM @sql;
	   EXECUTE s1;
	   DEALLOCATE PREPARE s1;
END$$
DELIMITER ;$$

注意两个地方,@SQL 是 系统内置的 的一个函数,把要执行的动态sql 赋值给 @SQL 动态拼接的sql 要用 CONCAT 函数 连接起来 , 如果 拼接的 sql 中的变量要添加引号 要用 CONCAT 函数处理 例如 

 SET v_sql_1= CONCAT('select count(a.concattype) from res_customer_info a left join car_staff b on b.staff_id=a.sales_id where 1=1 and a.concattype = 2 and a.auditflag = 1 and a.entitytype != 3 and UNIX_TIMESTAMP( a.createtime ) BETWEEN UNIX_TIMESTAMP(',CONCAT('"',starttime,'"'),') AND UNIX_TIMESTAMP(',CONCAT('"',endtime,'"'),')');

编译成功后call 存储过程名(参数一,参数二);调试的时候可以把变量用 select 变量名; 的方式打印。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值