как записать цикл для типа записи в оракуле

У меня есть следующее утверждение, которое компилирует прекрасный в моем пакете:

заголовок пакета:

   TYPE role_user_type IS RECORD (
      ROLE_ID        some_table.ROLE_ID%TYPE,
      SUBGROUP       some_table.USER_ID%TYPE
   );

тело:

ROLE_USER_REC                  MY_PACKAGE.ROLE_USER_TYPE;

SELECT B.USER_ID, B.ROLE INTO ROLE_USER_REC
FROM some_table where user_id like 'M%'

каков каркас для цикличного выполнения через ROLE_USER_REC? мы можем даже циклично выполниться через него?

7
задан learn_plsql 19 July 2010 в 14:51
поделиться

2 ответа

Зацикливать нечего.

role_user_type определяет одну запись, к которой вы можете получить доступ через:

dbms_output.put_line( role_user_rec.role_id || ', ' || role_user_rec.subgroup );

Ваш SELECT ... INTO завершится ошибкой, как только будет возвращено более одной строки.


Если вам нужно сохранить несколько из этих записей, вы можете использовать вложенные таблицы , например
TYPE role_user_tab IS ТАБЛИЦА 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;
17
ответ дан 6 December 2019 в 07:49
поделиться

Вы можете использовать цикл FOR с курсором:

BEGIN
  FOR role_user_type IN ('SELECT B.USER_ID, B.ROLE FROM some_table where user_id like ''M%'')
  LOOP
    dbms_output.put_line('User ID: '||role_user_type.user_id);
    etc...
  END LOOP;
END;

Другая альтернатива:

DECLARE
  CURSOR C IS
SELECT B.USER_ID, B.ROLE 
  FROM some_table 
 where user_id like 'M%';
BEGIN
  FOR role_user_type IN C LOOP
    dbms_output.put_line('User ID: '||role_user_type.user_id);
    etc...
  END LOOP;
END;
5
ответ дан 6 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: