2012-05-09 19 views
0

私は最初のMySQL手続きを書いています。私は乱数を生成し、この数値を持つテーブルの値を更新しようとしますが、それが既に存在しない場合に限ります(ユニーク制約のため)。私の手順は次のようになります。手順を実行する際に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 

私はこのエラーを得た:データの切り捨て:データ長すぎる行の列「_RC」の私のRC柱8はVARCHAR(255)ですが、私はこれを推測します問題の核心ではありません。助言がありますか?

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

答えて

0

代わりの

declare _rc char; 

試し:あなただけの数を格納するのに十分ではない単一の文字を、保持することができます_RC現在

declare _rc varchar(255); 

ただし、ご使用の場合は、uuid_short()の機能をご覧ください。これは、一意であることが保証されている大きな乱数を生成します(いくつかの規則の影響を受けます)。このようにして、手順を1つの文で置き換えることができます。

update patient set rc = uuid_short(); 
+0

ありがとうございました!魅力のように動作します。 _rc変数を正確に10文字長くする必要があるため、uuid_short()関数を使用することはできません。 –