2013-04-26 101 views
2

我有很少的數據表中的工作,一個MySQL存儲過程:SQL存儲過程 - 變量太短

SQL Fiddle Demo - >感謝馬哈茂德·賈邁勒此。

的問題是,這precedure不能與許多工作的元數據:

CREATE TABLE Metadata (`metadata_id` int, `metadata_name` varchar(25)) ; 

INSERT INTO Metadata 
    (`metadata_id`, `metadata_name`) 
VALUES 
    (1, 'duration'), 
    (2, 'extension'), 
    (3, 'size'), 
    (4, 'duration2'), 
    (5, 'extension2'), 
    (6, 'size2'), 
    (7, 'duration3'), 
    (8, 'extension3'), 
    (9, 'size3'), 
    (10, 'duration4'), 
    (11, 'extension4'), 
    (12, 'size4'), 
    (13, 'duration5'), 
    (14, 'extension5'), 
    (15, 'size5'), 
    (16, 'duration6'), 
    (17, 'extension6'), 
    (18, 'size6') 
; 

似乎與@聲明會話變量是太短了!

而這張表最後將有大約150個元數據。

SET @sql = NULL; 
SET @cols = NULL; 

SELECT 
    GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(m.metadata_name = ''', 
     m.metadata_name, ''', v.value, 0)) AS ', '''', m.metadata_name, '''') 
) INTO @cols 
FROM Metadata AS m; 

SET @sql = CONCAT(' 
    SELECT 
    v.file, ', @cols ,' 
    FROM `values` AS v 
    INNER JOIN metadata AS m ON v.metadata_id = m.metadata_id 
    GROUP BY v.file'); 

prepare stmt 
FROM @sql; 

execute stmt; 

兩個變量@sql@cols簡單的場景,如在本演示做工精細,但對我來說我有150元,在這種情況下,我得到了一個錯誤,該變量太短。

如何聲明這兩個變量,以便他們把這個來自串聯150個元數據名稱的太長文本?

在此先感謝

回答

2

是的,這可能是GROUP_CONCAT函數的一個問題,它有一個限制。

運行此查詢 - SELECT @@local.group_concat_max_len;它將返回GROUP_CONCAT()函數允許的最大結果長度。

你需要增加該值,例如 -

SET @@local.group_concat_max_len=10000; 
+1

非常驚人的..謝謝你!並感謝Mahmoud的編輯!我希望下一次這是我會幫助你;) – 2013-04-26 07:55:16