0

私の問題は次のとおりです。

私は3つの関数と1つのSPを使用して数字を単語に変換しています...関数の1つから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
4

1 に答える 1

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

Afterset 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ますか? 配列などのように、列全体を割り当てることはできません。

私はあなたのコード全体をレビューしたり、あなたのために書いたりはしません。問題に対する独自の解決策を考え出すことをお勧めします。他の人からの解決策を変換しようとしないでください。そこに出てくる質問は、ここで喜んで答えられます。

于 2012-09-13T10:51:49.700 に答える