问题1:prepare stmt from @v_sql; 这里只能使用带@符号的用户变量吗?我使用自定义的变量就报错。
问题2:@v_sql长度只支持1K吗?怎样在存储过程中修改这个的长度?我在存储过程中使用set group_concat_max_len = 4000;无效。
我想实现的是一个动态SQL行转列的问题,当数据比较多的时候,字符串的长度会超过1000,好像就会报错。
代码如下:
#set group_concat_max_len = 4000; set @sql = ''; set @str_tmp = ''; select @sql := CONCAT(@sql, 'IF(btncode="',btncode,'", 1, 0) as col', btncode, ',') as aa into @str_tmp from (select distinct btncode from tb_com_buttoninfo) A order by LENGTH(aa) desc limit 1; set @v_sql = CONCAT('select distinct x.modcode, x.modname, x.parentCode, z.btncode,',LEFT(@str_tmp,CHAR_LENGTH(@str_tmp)-1),' from tb_com_ModuleInfo x inner join tb_com_RoleModuleMap y on x.modCode = y.modCode left join tb_com_ModuleButtonMap z on x.modcode = z.modcode where x.sysCode = ''' + pi_sysCode + ''' and y.roleCode = ''' + pi_roleCode + ''''); prepare stmt from @v_sql; execute stmt ; deallocate prepare stmt;