0

初めての MySQL プロシージャを作成しています。乱数を生成し、この数値でテーブルの値を更新しようとしましたが、それがまだ存在しない場合に限ります (一意の制約のため)。私の手順は次のようになります。

create procedure generaterc()
begin
declare _rc char;
declare _id int;
set _id = 1;

while _id < ((select count(*) from patient) - 1) do
    begin
    set _rc = cast(FLOOR(1000000000 + (RAND() * 8999999999)) AS char);
    select _rc;
    if not exists(select * from patient where patient.rc = _rc) then
        update patient set rc=_rc where id=_id;
        set _id=_id+1;            
    end if;
    end;
end while;    
end

手順を実行すると、次のエラーが発生しました: Data truncation: Data too long for column '_rc' at row 8. My rc column is varchar(255), but これは問題の核心ではないと思います. 助言がありますか?

どうもありがとうございました。

4

1 に答える 1

0

それ以外の

declare _rc char;

試す:

declare _rc varchar(255);

現在、_rc は 1 文字しか保持できないため、数値を格納するには不十分です。

ただし、あなたのユースケースでは、uuid_short()関数を見てみたいかもしれません。一意であることが保証されている大きな乱数を生成します (いくつかの規則に従います)。このようにして、プロシージャを単一のステートメントに置き換えることができます。

update patient set rc = uuid_short();
于 2012-05-09T22:04:27.973 に答える