MySQL存储过程动态sql 自定义存储过程遇坑总结~

本文总结了作者在实现MySQL存储过程动态SQL过程中遇到的挑战,包括为新生成的日志表单自动授权的存储过程编写,以及在过程中遭遇的错误,如SQL语法错误和单引号问题。通过参考他人示例和自我调试,最终成功解决问题。
摘要由CSDN通过智能技术生成

昨天新有个新需求,sql事件每月会自动生成一个新得日志表单,需要写一个事件和存储过程自动对生成表单的相应sql用户进行授权。于是这个任务就落到我头上,说实话我对sql存储过程也不是很熟,在写存储过程的时候遇到各种坑。不过还好有万能的网友的无私奉献的各种例子可以参考,最终耗时30小时(从接任务开始算,也包括睡觉时间)初步完成了任务。现在总结一下遇到的各种坑。
刚开始我的存储过程是这样的:

delimiter //
CREATE PROCEDURE View_authorization()
BEGIN
/*这里定义了一大堆的变量*/
DECLARE g_slet,g_grant_ex,g_grant_ex,g_ex_1,g_ex_2,g_re_1,g_re_2,sql_re_1,sql_re_2,sql_ex_1,sql_ex_2 varchar(200) DEFAULT NULL;
DECLARE g_tt,g_year,g_slet_re,g_slet_ex INT DEFAULT 0;
/*最恶心就是这里了。之前一直给我报查询失败的错。后来解决了。但是又开始报截断错误。我查了一下才发现是我的数据类型忘改了~*/
set @g_year=DATE_FORMAT(CURRENT_DATE(),'%y_%m');
/*这里本来想先查询一下表是否生成的,但是这个动态sql赋值实在是变态的难搞。后来被我干掉了*/
g_tt=(SELECT MONTH(CURRENT_DATE ()));
select count(*) into g_slet_re from information_schema.TABLES t where t.TABLE_SCHEMA ="gamedb" and t.TABLE_NAME = concat('tb_recharge_cc_',g_year);
select count(*) into g_slet_ex from information_schema.TABLES t where t.TABLE_SCHEMA ="gamedb" and t.TABLE_NAME = concat('tb_exchange_cc_',g_year);
set g_grant_ex='grant SELECT ON gamedb.tb_exchange_cc_';
set g_grant_re='grant SELECT ON gamedb.tb_recharge_cc_';
set @sql_re_1=concat(@g_slet_re,@g_year,'"'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值