MySQL动态变量被截断

时间:2011-09-19 17:48:54

标签: mysql stored-procedures

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

当我的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声明为非动态变量,但后来准备好的语句失败。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

感谢您的帮助!