Oracle - weryfikacja unikalnego wygenerowanego stringa

0

Witam,

Piszę procedure w oracle, ktora dla rekordów z tabeli ze stane na = 2020-01 zrobi update na kolumnie token, który u mnie generuje sie randomowo jako string 8 znakowy. Uzylem funkcji dbms_random.random. Działa prawidłowo.

Moje pytanie, to jak mozna w latwy sposob sprawdzać czy wygenerowany token jest unikatowy? Jezeli tak to zapisz do zmiennej i zrob update jezeli nie to powtorz generowanie i tak w petli.

Aktualnie mam:

Begin
For rekord in cursor_name
Loop
Generuj token i zapisz do v_token
Update kolumny dla rekord.id
End loop;

Gdzie cursor name to select dla danego okresu.

1

Załóż unikalny indeks na kolumnę token.

0

@Patryk27: tylko ze ten token ma byc tylko unikatowy dla danego okresu a dwa jak wtedy odniesc sie e procedurze zeby petla wykonywała sie do czasu az zmienna token bedzie unikatowa czyli nie mam jej w tabeli dla tego okresu?

3

token ma byc tylko unikatowy dla danego okresu

W takim razie zrób dwie kolumny (okres_data, okres_token) i stwórz indeks złożony.

jak wtedy odniesc sie e procedurze zeby petla wykonywała sie do czasu az zmienna token bedzie unikatowa

Spróbowałbym z on duplicate key (https://docs.oracle.com/cd/E17952_01/mysql-5.1-en/insert-on-duplicate.html).

1

A musi być 8-znakowy?

Jeśli nie, to może po prostu generuj tak przez SYS_GUID():
https://docs.oracle.com/cd/B12037_01/server.101/b10759/functions153.htm

0

Moje pytanie, to jak mozna w latwy sposob sprawdzać czy wygenerowany token jest unikatowy? Jezeli tak to zapisz do zmiennej i zrob update jezeli nie to powtorz generowanie i tak w petli.

Jeśli chcesz to zrobić w pętli to zrób np pętle while z flaga isTokenUnique albo jakiś inny rodzaj REPEAT UNTIL LOOP, sprawdzaj dla danego zakresu czy token jest unique, jeśli tak to wychodzisz z loop i robisz update.

1 użytkowników online, w tym zalogowanych: 0, gości: 1