2012-09-11 30 views
0

我的問題是:使用MySQL的臨時表,誤差1422

林3功能和1個SP進行數字單詞的皈依......當我從我的功能之一撥打SP

CALL extenso_trata_grupo(`ivalor`, ' Triliao', ' Trilioes', `flag_e`, `s_ext`); 
    Select `s_ext` INTO `s_ext` from tbl_temp; 

這給了我一個1422的錯誤...當我本身(單獨)使用它,沒有INTO,它給了我沒有錯誤...

任何幫助嗎?

UPDATE

BEGIN 
DECLARE ivalor BIGINT; 
DECLARE s_ext VARCHAR(255); 
DECLARE flag_e BIT; 
DECLARE grupo DECIMAL(10, 2); 

SET s_ext = ''; 
SET flag_e = 0; 
SET grupo = 0; 

if valor >= 1 then 
    set ivalor = valor/1000000000000; 
    if ivalor > 0 then 
     set valor = valor - (ivalor * 1000000000000); 
     CALL extenso_trata_grupo(`ivalor`, ' Triliao', ' Trilioes', `flag_e`, `s_ext`); 
      Select `s_ext` INTO `s_ext` from tbl_temp; 
    end if; 
    set ivalor = valor/1000000000; 
    if ivalor > 0 then 
     set valor = valor - (ivalor * 1000000000); 
     CALL extenso_trata_grupo(`ivalor`, ' Biliao', ' Bilioes', `flag_e`, `s_ext`); 
       Select `s_ext` INTO `s_ext` from tbl_temp; 
    end if; 
    set ivalor = valor/1000000; 
    if ivalor > 0 then 
     set valor = valor - (ivalor * 1000000); 
     CALL extenso_trata_grupo(`ivalor`, ' Milhao', ' Milhao', `flag_e`, `s_ext`); 
      Select `s_ext` INTO `s_ext` from tbl_temp; 
    end if; 
    ... 
    return `s_ext`; 
END 

UPDATE

存儲過程extenso_trata_grupo

BEGIN 
DECLARE RETORNO VARCHAR(255); 
DECLARE FLAG INT; 

SET RETORNO = s_ext; 
SET FLAG = flag_e; 

if grupo <> 0 THEN 
    if flag_e = 1 THEN 
     SET RETORNO = CONCAT(RETORNO,' e'); 
    END IF; 
    SET flag_e = 1; 
    SET RETORNO = CONCAT(RETORNO, 
     (SELECT extenso_grupo(grupo) as grupo), 
     (CASE WHEN grupo = 1 THEN singular ELSE plural END)); 
END IF; 
DROP TABLE IF EXISTS `tbl_temp`; 
CREATE TEMPORARY TABLE `tbl_temp` (
    flag_e tinyint, 
    s_ext varchar(255) 
); 
INSERT INTO `tbl_temp` (flag_e, s_ext) VALUES(flag, retorno); 
END 
+0

你需要更多的代碼?爲你的幫助;) – Gil

+0

存儲過程創建一個臨時表,它爲什麼我標記臨時表..好吧,我的英語不是最好的,我知道..對不起... ...我不知道如何解釋我的問題更好..所以希望任何人都幫助我.. – Gil

+0

,當然它的MySQL .... - '我使用的是... – Gil

回答

0

我只是飛過你的代碼,停止我寫這篇文章:

if valor >= 1 then 
    set ivalor = valor/1000000000000; 
    if ivalor > 0 then 
     set valor = valor - (ivalor * 1000000000000); 
     CALL extenso_trata_grupo(`ivalor`, ' Triliao', ' Trilioes', `flag_e`, `s_ext`); 
      Select `s_ext` INTO `s_ext` from tbl_temp; 
    end if; 

的代碼將永遠不會通過if ivalor > 0 then後,你可能要改變,要if ivalor >= 1 then

set valor = valor - (ivalor * 1000000000000);valor將始終爲0。您以前set ivalor = valor/1000000000000;做了,所以基本上你在做

set valor = valor - (valor/1000000000000 * 1000000000000); 

Select `s_ext` INTO `s_ext` from tbl_temp; 

哪個tbl_temp的行應該會被分配給s_ext?你不能分配一個整列,如數組或其他東西。

我不會審查你的整個代碼或爲你寫。我建議你拿出你自己的解決方案來解決這個問題,不要試圖從其他人那裏解決問題。那裏將出現的問題將在這裏愉快地回答。

+0

感謝您的幫助,生病後,當我想出我的問題 – Gil