2016-05-22 12 views
0

ランダムな8桁の数字を生成するためのクエリを作成して、テーブルに値を挿入しています。生成される数字は一意でなければなりません。Oracleで8桁の乱数を生成し、その数字は一意でなければなりません。

例:以下はクエリです。これはランダムな8桁の数字を生成し、それをテーブルのtempに挿入しています。テーブルに挿入する前に毎回、以下のクエリから生成された数値が一時テーブルでalredyであるかどうかを確認する必要がありますか?

forループを使用すると、同時に多くのトランザクションが発生する場合に遅延が発生するため、有用ではないようです。 gotoのような他の提案は、数字がすでにテーブルにある場合、gotoを使用して一意の値が得られるまで同じクエリにリダイレクトできますか?

問合せ:あなたはユニークな値を探している場合

select trunc(dbms_random.value(10000000,99999999)) 
into v_customer_nbr 
from dual; 
+0

投稿されたのはすべてプログラムの説明です。しかし、あなたは[質問する]必要があります(http://stackoverflow.com/help/how-to-ask)。私たちはあなたが私たちから何を望んでいるかを確信することはできません私たちが答えることができる有効な質問を含めるために投稿を編集してください。リマインダー:あなたが知っていることを確認してください(ここには何が話題になっていますか?)(http://stackoverflow.com/help/on-topic)。 –

+0

生成された乱数を直接挿入しないでください。生成された乱数でselectを実行します.dbが行を返す場合は、テーブルにない乱数を取得するまで、別の乱数を生成します。 –

+0

これは動作しているかどうか教えてください: 'SELECT trunc(dbms_random.value(1000000,99999999))AS random_num FROM double_num" random_num "NOT IN(SELECT randcolumn FROM v_customer_nbr)LIMIT 1' –

答えて

1

あなたはむしろ代わりにSYS_GUIDを使用することを検討すべきです。 SYS_GUIDは、16バイトからなるグローバル一意識別子を生成して返します。

関連する問題