1

私はストアドプロシージャを書いています。変数を LIMIT およびプリペアド ステートメントと組み合わせて使用​​すると、問題が発生します。(以下のコードを参照)

プロシージャは正常に作成されますが、呼び出すと、変数aが宣言されていないというエラーが発生します。助言がありますか?

delimiter //
drop procedure if exists shop1;
create procedure shop1()
begin 
    declare a varchar(255) default null;
    declare counter int(4) default 0;
    declare row_numbers int(4); 
    declare s varchar(255) default null;

    select count(*) into row_numbers from salesmen;
    WHILE counter< row_numbers+1 DO
        set @s='select fio from salesmen into a Limit ? 1';
        set @counter=counter;
        prepare stmt from @s;
        execute stmt using @counter;

        SET counter=counter+1;
        insert into warehouse.place (shop, fio) values (1, a);
    END WHILE;

    SET counter=0;
    select count(*) into row_numbers from products;
    WHILE counter< row_numbers+1 DO
        SET counter=counter+1;
    END WHILE;
end; 
//
4

2 に答える 2

1

INSERT ... SELECT を使用して同じことを行うことができます-

INSERT INTO warehouse.place (shop, fio)
SELECT 1, fio FROM salesmen
于 2012-04-08T19:12:51.730 に答える
0

もしかして?

set @s='select fio from salesmen into a Limit ?,1';
于 2012-04-08T17:21:21.170 に答える