일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Serial
- Visual Studio Code
- tensorflow
- sql developer
- 딥러닝
- 장고
- PYTHON MSSQL
- rs485
- Python
- pymssql
- 텐서플로우
- 티스토리 초대장
- MEAN Stack
- scrapy
- oracle
- 오라클
- 자본주의
- 파이썬
- M2M
- MSSQL PYTHON
- matplot
- 크롤링
- MSSQL
- 윈도우10
- windows10
- rs422
- django
- MX Component
- c#
- vscode
Archives
- Today
- Total
안까먹을라고 쓰는 블로그
[SQL Query] Cursor 본문
반응형
Sales 테이블을 참조하여, 아래의 조건을 추가 한후, Sales2에 데이터를 입력하시오
이전 연도가 없을 경우 : NULL
이전 연도보다 매출이 올랐을 경우 : +
이전 연도보다 매출이 내렸을 경우 : -
이전 연도와 매출이 동일한 경우 : =
Sales 테이블
company(회사) | year(연도) | sale(매상 : 억) |
A | 2002 | 50 |
A | 2003 | 50 |
A | 2004 | 55 |
A | 2007 | 55 |
B | 2001 | 27 |
B | 2005 | 28 |
B | 2006 | 28 |
B | 2009 | 30 |
C | 2001 | 40 |
C | 2005 | 39 |
C | 2006 | 38 |
C | 2010 | 35 |
커서를 이용한 쿼리
CREATE OR REPLACE PROCEDURE PROC_INSERT_VAR
IS
/* 커서 선언 */
CURSOR c_sales IS
SELECT company, year, sale
FROM Sales
ORDER BY company, year;
/* 레코드 타입 선언 */
rec_sales c_sales%ROWTYPE;
/* 카운터 */
i_pre_sale INTEGER := 0;
c_company CHAR(1) := '*';
c_var CHAR(1) := '*';
BEGIN
OPEN c_sales;
LOOP
/* 레코드를 패치해서 변수에 대입 */
fetch c_sales into rec_sales;
/* 레코드가 없다면 반복을 종료 */
exit when c_sales%notfound;
IF (c_company = rec_sales.company) THEN
/* 직전 레코드가 같은 회사의 레코드 일때 */
/* 직전 레코드와 매상을 비교 */
IF (i_pre_sale < rec_sales.sale) THEN
c_var := '+';
ELSIF (i_pre_sale > rec_sales.sale) THEN
c_var := '-';
ELSE
c_var := '=';
ENDIF;
ELSE
c_var := NULL;
ENDIF;
/* 등록 대상이 테이블에 테이블을 등록 */
INSERT INTO Sales2 (company, year, sale, var)
VALUES (rec_sales.company, rec_sales.year, rec_sales.sale, c_var);
c_company := rec_sales.company;
i_pre_sale := rec_sales.sale;
END LOOP;
CLOSE c_sales;
commit;
END;
결과값 - Sales2 테이블
company(회사) | year(연도) | sale(매상 : 억) | var(변화) |
A | 2002 | 50 | |
A | 2003 | 50 | + |
A | 2004 | 55 | + |
A | 2007 | 55 | = |
B | 2001 | 27 | |
B | 2005 | 28 | + |
B | 2006 | 28 | = |
B | 2009 | 30 | + |
C | 2001 | 40 | |
C | 2005 | 39 | - |
C | 2006 | 38 | - |
C | 2010 | 35 | - |
반응형
'DataBase' 카테고리의 다른 글
[SQL Query] 구매이력에서 고객 별 (가장 최신이력 - 오래된 이력)의 구매가격(price)의 차이를 구하시오 (0) | 2022.01.07 |
---|---|
[SQL Query] UNION, INTERSECT, EXCEPT (Feat. 집합연산) (0) | 2022.01.06 |
Comments