-
[PostgreSQL] 커서를 활용하는 프로시저 만들기개발/Database 2020. 2. 16. 12:24
차세대 프로젝트에서 데이터 이관 작업을 하다 보니 타겟 목록을 SELECT 하여 커서에 담은 뒤,
커서의 크기만큼 반복문을 돌며 원하는 처리를 해주는 패턴이 굉장히 유용했다.
이번에도 우연한 기회에 PostgreSQL에서 비슷한 작업을 했는데, 내가 까먹을 것 같아서 기록해둔다.
오라클 프로시저와의 차이점은 약간의 문법 차이 정도만 있고, 거의 유사한 것 같다.
(유의사항 : PostgreSQL 11에서부터 프로시저를 지원)
아래 예제는 실제 사용했던 프로시저를 포스팅용으로 많이 요약한 버전으로,
student 테이블에서 grade가 1인 데이터를 추출하여 커서에 담은 뒤
커서를 반복문으로 돌리면서 student_2020 테이블에서 커서에 담은 데이터의 id와 동일한 로우의 grade를 2로 업데이트해준다.
(물론 이 예시의 로직은 커서를 쓸 필요 없이 UPDATE문 하나로 해결 가능한 로직이지만...창작 능력의 한계로...)
123456789101112131415161718192021222324252627CREATE OR REPLACE PROCEDURE TEST_CURSOR_LOOP()LANGUAGE 'plpgsql'AS $BODY$DECLARE TARGET_CURSOR record;BEGINFOR TARGET_CURSOR INSELECTidFROMstudentWHEREgrade = 1LOOPRAISE NOTICE 'TARGET ID %', TARGET_CURSOR;UPDATEstudent_2020SETgrade = 2WHEREid = TARGET_CURSOR.id;END LOOP;END;$BODY$;cs '개발 > Database' 카테고리의 다른 글
[Oracle] v$sql 초기화 (메모리 공간 초기화) (0) 2019.08.10 [Oracle] 계정 잠금 해체 (0) 2019.07.20 [Oracle] 시퀀스의 현재값 변경하기 (0) 2019.05.08 [MySQL] MySQL에서 ROW_NUMBER 사용하기 (0) 2019.02.19 [postgreSQL] 멀쩡한 컬럼인데 column does not exist 오류가 발생할 때 (0) 2019.01.17 댓글