2011-09-19 61 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