-
Notifications
You must be signed in to change notification settings - Fork 0
/
"cursor "in SQL
34 lines (32 loc) · 1.45 KB
/
"cursor "in SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
https://velog.io/@hausectka/pgsql-cursor를-사용하여-같은-row의-date-type-record-비교하기
--part of my uni SQL assignment(PostgreSQL), declaring date_lookup function using "cursor"
create function date_lookup(_day date) returns int
as
$$
declare
curr record;
prev record;
d_cursor cursor for select * from season;
begin
open d_cursor;
fetch d_cursor into curr;
curr.star_date = curr.start_date -7;
prev = curr; --loop으로 curr 데이터가 변형되기 전에 prev에 저장
loop
fetch d_cursor into curr;
exit when not found; --postgresqltutorial 커서 소개글 참고
if curr.start_date - prev.ending <= 7 then
curr.start_date = prev.ending +1; --이전 학기 종료일과 현재 학기 시작일이 7일도 차이가 나지 않을 때,
else
curr.start_date = curr.start_dtae -7; --일반적으로 n학기의 공식 시작일 보다 1주일 전부터 n학기라고 지칭
prev.end_date = curr.start_date -1; --일반적으로는 n학기의 공식 시작일의 1주일전까지가 이전학기(n-1학기)라고 인식
end if;
if prev.start_date <= _day and _day <= prev.ending then --검색한 날짜가 prev에 저장된 start, end 날짜 사이에 들어가는지 확인 후, 맞다면 해당 행의 값 리턴
close d_cursor;
return prev.id;
end if;
prev = curr; --다음 행으로 넘어가기 위해 record2가 record1이 됨
end loop;
end;
$$ language plpgsql
;