【发布时间】:2012-09-11 10:01:08
【问题描述】:
我的问题是:
我使用 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,它没有给我任何错误...
有什么帮助吗?
更新
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
更新
存储过程 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
【问题讨论】:
-
您需要更多代码吗?谢谢你的帮助;)
-
该存储过程创建了一个临时表,这就是我标记临时表的原因.. 好吧,我的英语不是最好的,我知道.. 抱歉...我不知道如何解释我的问题更好..所以希望有人帮助我..
-
当然还有它的 mysql.... --' 我正在使用它...
-
ofc 不是,那是一个函数,正如我一开始所说,我使用 3 个函数和 1 个存储过程...
-
墓碑?现在你删除了你的cmets?并降低我的问题? :(真的很好
标签: mysql stored-procedures temp-tables