2016-05-22 2 views
0

Ich habe Abfrage geschrieben, um eine zufällige 8-stellige Zahl zu generieren, und dann füge ich Werte in eine Tabelle ein. Die erzeugten Zahlen sollten eindeutig sein.Generieren Sie 8-stellige Zufallszahl in Oracle, und die Nummer sollte eindeutig sein

Beispiel: Sagen Sie unten ist Abfrage, dies generiert zufällige 8-stellige Nummer, und ich füge es in die Tabelle Temp. Nun muss ich jedes Mal, bevor ich in die Tabelle einfüge, prüfen, ob die Zahl, die aus der unteren Abfrage generiert wird, in der temporären Tabelle bereits vorhanden ist.

Die Verwendung von for-Schleife scheint nicht sinnvoll zu sein, da es Lag verursachen wird, wenn viele Transaktionen zur gleichen Zeit sein werden. Irgendwelche anderen Vorschläge wie goto, wenn die Nummer bereits in der Tabelle ist, können wir goto verwenden und sie dann zu derselben Abfrage umleiten, bis wir einen eindeutigen Wert erhalten?

Abfrage:

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

Alles, was gepostet wurde, ist eine Programmbeschreibung. Allerdings müssen Sie [eine Frage stellen] (http://stackoverflow.com/help/how-to-ask). Wir können nicht sicher sein, was Sie von uns wollen. Bitte [bearbeiten] Sie Ihren Beitrag, um eine gültige Frage zu enthalten, die wir beantworten können. Erinnerung: Stellen Sie sicher, dass Sie wissen, was hier zu tun ist (http://stackoverflow.com/help/on-topic), und bitten Sie uns, das Programm für Sie zu schreiben, und die Vorschläge sind off-topic. –

+0

Fügen Sie die generierte Zufallszahl nicht direkt ein. Führen Sie eine Auswahl mit der generierten Zufallszahl durch. Wenn die Datenbank eine Zeile zurückgibt, generieren Sie eine weitere Zufallszahl, und wiederholen Sie den Vorgang, bis Sie eine Zufallszahl erhalten, die nicht in der Tabelle enthalten ist. –

+0

Bitte lassen Sie mich wissen, wenn das funktioniert: 'SELECT trunc (dbms_random.value (1000000,99999999)) AS random_num FROM dual WHERE" random_num "NICHT IN (SELECT randcolumn VON v_customer_nbr) LIMIT 1' –

Antwort

1

Wenn Sie eindeutige Werte suchen, dann sollten Sie lieber betrachten SYS_GUID stattdessen verwenden. generiert und gibt einen global eindeutigen Bezeichner zurück, der aus 16 Bytes besteht.

Verwandte Themen