Нет ничего зацикливаться.
role_user_type
определяет одну запись, к которой вы можете получить доступ через:
dbms_output.put_line( role_user_rec.role_id || ', ' || role_user_rec.subgroup );
Ваш SELECT ... INTO
потерпит неудачу, как только будет возвращено более одной строки.
Если вам нужно сохранить несколько таких записей, вы можете использовать вложенные таблицы как
TYPE role_user_tab IS TABLE OF role_user_type
Пример
DECLARE
TYPE role_user_type IS RECORD (
ROLE_ID VARCHAR2(10),
SUBGROUP VARCHAR2(10)
);
TYPE role_user_tab IS TABLE OF role_user_type;
role_user_rec role_user_tab;
BEGIN
SELECT 'A', 'B'
BULK COLLECT INTO role_user_rec
FROM dual;
FOR i IN role_user_rec.FIRST .. role_user_rec.LAST LOOP
dbms_output.put_line( role_user_rec(i).role_id || ', ' || role_user_rec(i).subgroup );
END LOOP;
END;