Po pierwsze muszę powiedzieć:zły pomysł na zrobienie tego w ten sposób. Z dwóch powodów:
- Połączenia są oparte na użytkowniku. Oznacza to, że w dużej mierze tracisz korzyści z puli połączeń. Nie skaluje się też zbyt dobrze. Jeśli masz jednocześnie 10 000 użytkowników, będziesz stale otwierać i zamykać twarde połączenia (zamiast miękkich pul połączeń); i
- Jak już odkryłeś, tworzenie i usuwanie użytkowników to DDL, a nie DML, przez co tracisz „transakcję”.
Nie wiem, dlaczego zdecydowałeś się to zrobić, ale zdecydowanie zalecamy zaimplementowanie użytkowników w aplikacji, a nie w warstwie bazy danych.
Co do tego, jak rozwiązać swój problem, w zasadzie nie możesz. Tak samo, jak gdybyś tworzył tabelę lub indeks w środku sekwencji.