2011-09-19 77 views
1

我在写一个存储过程,其中我使用动态变量来定义一个SQL块。然后,我从动态变量创建一个准备好的语句并执行它。MySQL动态变量被截断

当我的SQL获取超过255个字符时,它被截断(大概是一个限制动态变量)。

set @NEW_CAMPAIGN_SQL = concat(
    'CREATE TABLE `', CAMPAIGN_TABLE, '` (', 
     '`id` bigint(20) unsigned NOT NULL auto_increment,', 
     '`code` char(', _CODE_LEN, ') NOT NULL default \'\',', 
     '`status` tinyint(1) unsigned NOT NULL default 1,', 
     'PRIMARY KEY (`id`),', 
     'KEY `code_idx` (`code`),', 
     'KEY `status_idx` (`status`)', 
    ') ENGINE=InnoDB DEFAULT CHARSET=latin1' 
); 

PREPARE NEW_CAMPAIGN_STMT FROM @NEW_CAMPAIGN_SQL; 
EXECUTE NEW_CAMPAIGN_STMT; 
Deallocate prepare NEW_CAMPAIGN_STMT; 

我尝试了声明NEW_CAMPAIGN_SQL作为非动态可变的,但随后准备好的声明失败。

任何建议,将不胜感激。

+0

我无法重现错误。你能复制粘贴你正在收到的Mysql错误吗? – srivani

+0

是的,这是我自己的错(见下面的答案)。谢谢你的帮助! – jckdnk111

回答

0

啊废话。通常情况下,这是我自己的愚蠢,而不是MySQL的错误。我将SQL字符串返回给varchar(255)的OUT参数。

感谢您的帮助!

0

检查MySQL的Set Syntax。您不需要存储过程中的@(您是否来自SQL Server?)。您还应该检查Declare for Local Variables,因为这可能会对您有所帮助。

+0

很确定@需要在存储过程中使用预处理语句。 – jckdnk111