如何在oracle中为记录类型编写循环

如何在oracle中为记录类型编写循环,oracle,plsql,Oracle,Plsql,我的软件包中包含以下语句: 包头: TYPE role_user_type IS RECORD ( ROLE_ID some_table.ROLE_ID%TYPE, SUBGROUP some_table.USER_ID%TYPE ); 正文: 通过ROLE\u USER\u REC循环的框架是什么?我们甚至可以循环通过它吗?没有什么可以循环的 role\u user\u type定义了一条记录,您可以通过以下方式访问该记录: db

我的软件包中包含以下语句:

包头:

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


通过
ROLE\u USER\u REC
循环的框架是什么?我们甚至可以循环通过它吗?

没有什么可以循环的

role\u user\u type
定义了一条记录,您可以通过以下方式访问该记录:

dbms_output.put_line( role_user_rec.role_id || ', ' || role_user_rec.subgroup );
您的
选择。。。返回多行时,INTO
将立即失败


如果需要存储多个记录,可以使用like
TYPE role\u user\u选项卡是role\u user\u 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;

可以将光标用于循环:

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;

您可以为此使用游标

FOR i in (/* Your Select query*/)
loop
/* You can use value of the column fetched from select query like i.column_name
and use it which ever way you want */
end loop;
FOR i in (/* Your Select query*/)
loop
/* You can use value of the column fetched from select query like i.column_name
and use it which ever way you want */
end loop;