У меня есть таблица вроде этого:
Id | GroupId | Category
------------------------
1 | 101 | A
2 | 101 | B
3 | 101 | C
4 | 103 | B
5 | 103 | D
6 | 103 | A
........................
Мне нужно выбрать один из GroupId
случайным образом. Для этого я использовал следующий блок кода PL/SQL:
declare v_group_count number;
v_group_id number;
begin
select count(distinct GroupId) into v_group_count from MyTable;
SELECT GroupId into v_group_id FROM
(
SELECT GroupId, ROWNUM RN FROM
(SELECT DISTINCT GroupId FROM MyTable)
)
WHERE RN=Round(dbms_random.value(1, v_group_count));
end;
Поскольку я округлял случайное значение, тогда это будет целочисленное значение, а условие WHERE RN=Round(dbms_random.value(1, v_group_count))
должно всегда возвращать одну строку. Как правило, это дает мне одну строку, как ожидалось. Но, как ни странно, иногда это не дает мне никаких строк, а иногда возвращает две строки.. Поэтому он дает ошибку в этом разделе:
SELECT GroupId into v_group_id
Кто-нибудь знает причину такого поведения?