2014-04-04 63 views
0

我寫一個程序 -獲取錯誤代碼:1292在存儲過程中截斷不正確的DOUBLE值?

DELIMITER $$ 

USE `genome`$$ 

DROP PROCEDURE IF EXISTS `get_family`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_family`(p_h INT(10)) 
BEGIN 
    DECLARE rv,q,queue,queue_children VARCHAR(1024); 
    DECLARE queue_length,front_id,pos INT; 

     SET rv = ''; 
    SET queue = p_h; 
    SET queue_length = 1; 

    WHILE queue_length > 0 DO 
     SET front_id = FORMAT(queue,0); 

     IF queue_length = 1 THEN 
      SET queue = ''; 
     ELSE 
      SET pos = LOCATE(',',queue) + 1; 
      SET q = SUBSTR(queue,pos); 
      SET queue = q; 
     END IF; 
     SET queue_length = queue_length - 1; 

     SELECT IFNULL(qc,'') INTO queue_children 
     FROM (SELECT GROUP_CONCAT(id) qc 
     FROM folder WHERE parent = front_id) A; 

     IF LENGTH(queue_children) = 0 THEN 
      IF LENGTH(queue) = 0 THEN 
       SET queue_length = 0; 
      END IF; 
     ELSE 
      IF LENGTH(rv) = 0 THEN 
       SET rv = queue_children; 
      ELSE 
       SET rv = CONCAT(rv,',',queue_children); 
      END IF; 
      IF LENGTH(queue) = 0 THEN 
       SET queue = queue_children; 
      ELSE 
       SET queue = CONCAT(queue,',',queue_children); 
      END IF; 
      SET queue_length = LENGTH(queue) - LENGTH(REPLACE(queue,',','')) + 1; 
     END IF; 
    END WHILE; 

    SELECT rv FROM DUAL; 

END$$ 

DELIMITER ; 

它成功了,但是當我調用了proc,則給了我錯誤 -

call get_family(117); 
Error Code: 1292 
Truncated incorrect DOUBLE value: '118,119,120,124' 

但是當我傳遞了相同的116中的過程,它的工作正常。 我在哪裏做錯了。請告訴我。

+0

它會給你一個行號,發生此錯誤的位置?我猜這是你有'SELECT INTO ... GROUP_CONCAT()'的地方。如果queue_children中的「qc」字段是雙字段,那麼您試圖在其中填充一串逗號分隔的數字,這是一個字符串,而不是double。 –

+0

@MarcB - 沒有它沒有給我任何行號。而queue_children是一個varchar類型。但是,如果它是針對116身份證運行,那麼爲什麼不針對117呢?有沒有什麼辦法可以將數據類型轉換爲數據類型? – Aamir

+0

這個'118,119,120,124'csv行是從哪裏來的?這就是你得到一個字符串的地方,以及你試圖將該字符串填充到雙精度的地方。 –

回答

0

好的我得到了解決方案。

我只是將varchar(輸出很長,我認爲)類型更改爲頂部的文本,現在它的工作正常。

相關問題