我正在编写一个存储过程,其中我使用动态变量来定义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 回答
检查MySQL的Set Syntax . 您不需要存储过程中的
@
(您来自SQL Server吗?) . 您还应该检查Declare for Local Variables,因为这可能会对您有所帮助 .啊废话 . 通常情况下,这是我自己的愚蠢而不是MySQL的任何错误 . 我将SQL字符串返回到varchar(255)的OUT参数 .
谢谢您的帮助!