mysql动态执行sql,PREPARE 的变量长度太长,不能execute怎么办?有解决办法么

Kael Z 2014-06-12 11:06:44
RT:
今天写了个存储过程,因为需要一个SQL里的字段内容是动态的,所以打算用动态SQL,这是那部分的代码:
SET @MSG_CLIENT=CONCAT('INSERT INTO ALARM_MESSAGE_CLIENT (ALARM_ID,USER_ID,MESSAGE_MODE,ALARM_DESC,STATUS,ERROR_CODE,FLAG,INSERT_TIME,SEND_TIME) ',
' SELECT DISTINCT A.ID ALARM_ID,B.USER_ID,D.MESSAGE_MODE MESSAGE_MODE,CONCAT(''',
REPLACE(REPLACE(V_CONTENT,'{',''',A.'),'}',','''),
''') ALARM_DESC,NULL STATUS,NULL ERROR_CODE,0 FLAG,NOW() INSERT_TIME,NULL SEND_TIME FROM ',
' VIEW_ALARM_TYPE_CURRENT A, ALARM_USER_TIMES B ,ALARM_MESSAGE_CONFIG C,ALARM_MESSAGE_TEMPLATE D',
' WHERE A.ID=B.ALARM_ID AND A.ALARM_TYPE=C.ALARM_TYPE AND C.MESSAGE_TEMPLATE_ID=D.ID',
' AND C.MESSAGE_TEMPLATE_ID IS NOT NULL ',
' AND B.MESSAGE_TIMES<=C.MESSAGE_MAX_TIMES AND C.MESSAGE_TEMPLATE_ID=',V_ID);
PREPARE SQL_MSG_CLIENT FROM @MSG_CLIENT;
EXECUTE SQL_MSG_CLIENT;
DEALLOCATE PREPARE SQL_MSG_CLIENT;

结果CALL过程的时候报错了:
Error Code : 1615
Prepared statement needs to be re-prepared
开始还以为是自己写的代码有问题呢,结果仔细找了下,发现是PREPARE 到的SQL_MSG_CLIENT 长度太长,如果改成个一两行的小SQL就能执行,但是这个太长了,因为V_CONTEN这个变量里大概有几百的长度吧,所以导致没法EXECUTE,求大神帮助
...全文
718 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2016-08-26
  • 打赏
  • 举报
回复
将 @MSG_CLIENT SELECT 出来确认下,看是截断了,还是拼出来的语句有问题
can0dou 2016-08-25
  • 打赏
  • 举报
回复
唉,也遇到了
道玄希言 2015-07-01
  • 打赏
  • 举报
回复
額, 早两天我用 SQLyog 调试了一个类似的查询, 也是调试不出来.... 代码还有部分被截掉了显示不出来.... 后来我换MYSQL WORKBENCH 居然能执行了... 具体怎么解决, 偶也期待...
  • 打赏
  • 举报
回复
真可怜,现在还没人回答……

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧