Oracle - weryfikacja unikalnego wygenerowanego stringa

Oracle - weryfikacja unikalnego wygenerowanego stringa
C6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 197
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.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Załóż unikalny indeks na kolumnę token.

C6
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 197
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?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
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).

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2384
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

AT
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.