2012-09-11 29 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