bestsource

오라클에서 레코드 유형에 대한 루프를 쓰는 방법

bestsource 2023. 7. 23. 14:33
반응형

오라클에서 레코드 유형에 대한 루프를 쓰는 방법

제 패키지에 다음과 같은 내용이 포함되어 있습니다.

패키지 헤더:

   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우리가 그것을 반복할 수 있습니까?

루프할 것이 없습니다.

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;

루프에 커서를 사용할 수 있습니다.

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;

언급URL : https://stackoverflow.com/questions/3282170/how-to-write-loop-for-a-record-type-in-oracle

반응형