반응형
오라클에서 레코드 유형에 대한 루프를 쓰는 방법
제 패키지에 다음과 같은 내용이 포함되어 있습니다.
패키지 헤더:
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
반응형
'bestsource' 카테고리의 다른 글
Android Emulator 오류 메시지: "PANIC: 'x86' CPU에 대한 에뮬레이터 엔진 프로그램이 없습니다." (0) | 2023.07.28 |
---|---|
사전을 컨트롤러에 전달 asp.net mvc (0) | 2023.07.28 |
Oracle에서 두 날짜 사이의 일 수(날짜 포함)를 가져옵니다. (0) | 2023.07.23 |
C 함수로 셸 내장 명령을 실행하려면 어떻게 해야 합니까? (0) | 2023.07.23 |
C를 사용하여 URL을 구문 분석하는 가장 좋은 방법은 무엇입니까? (0) | 2023.07.23 |