首页 文章

MySQL动态变量被截断

提问于
浏览
1

我正在编写一个存储过程,其中我使用动态变量来定义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

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

  • 0

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

    谢谢您的帮助!

相关问题