ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1080) N
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (184)
      • Unreal (69)
      • Unity (104)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (238) N
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (58) N
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (351)
      • C++ (168)
      • C# (90)
      • Java (9)
      • Python (35)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (20)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • Unity
  • 문자열
  • 파이썬
  • 백준
  • 오블완
  • 함수
  • 유니티
  • C
  • 그래픽스
  • 포인터
  • python
  • 알고리즘
  • 클래스
  • 티스토리챌린지
  • SQL
  • string
  • C++
  • c#
  • 언리얼
  • 배열

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[SQL] 커서 #1
프로그래밍 언어/SQL

[SQL] 커서 #1

2022. 6. 7. 18:23

1.TEST 테이블 생성하기

CREATE TABLE`TEST_TB1`(
`id`BIGINT(20) NOT NULL AUTO_INCREMENT,
`name`VARCHAR(50) NULL DEFAULT NULL COLLATE'utf8mb4_unicode_ci',
`useYn`VARCHAR(50) NULL DEFAULT NULL COLLATE'utf8mb4_unicode_ci',
PRIMARY KEY(`id`)
)
COLLATE = 'utf8mb4_unicode_ci'
ENGINE = InnoDB
AUTO_INCREMENT = 6;

2.기초 데이터 넣기

--autoincrement초기화
ALTER TABLE TEST_TB1 AUTO_INCREMENT=0;
 
--데이터삽입
INSERT INTO TEST_TB1(name,useYn)VALUES('조현영','Y');
INSERT INTO TEST_TB1(name,useYn)VALUES('박초아','Y');
INSERT INTO TEST_TB1(name,useYn)VALUES('김태연','Y');
INSERT INTO TEST_TB1(name,useYn)VALUES('김지숙','Y');
INSERT INTO TEST_TB1(name,useYn)VALUES('이상현','Y');
테이블 조회 결과

 

3.프로시저 만들기

DELIMITER$$
DROP PROCEDURE IF EXIST Stest_proc1;
CREATE PROCEDURE test_proc1()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE v_count INT DEFAULT-1;
DECLARE v_idvar char(20);
DECLARE v_name varchar(20);
DECLARE v_useYn varchar(20);
--select한결과를cursor1로정의
DECLARE cursor1 CURSOR FOR
SELECT id
,name
,useYn
FROMTEST_TB1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
OPENcursor1;
my_loop:LOOP
--loop하며cursor1의데이터를불러와변수에넣는다.
FETCHcursor1
INTOv_id
,v_name
,v_useYn;
SET v_count=v_count+1;
--cursor1반복이끝나면loop빠져나간다.
IF done THEN
LEAVE my_loop;
ENDIF;
IF(v_id=1)THEN
UPDATE TEST_TB1
SET name='전효성'
WHERE id=v_id;
ELSE IF(v_id=2)THEN
INSERT INTO TEST_TB1(name,useYn)
VALUES('insert값','N');
ELSE
UPDATE TEST_TB1
SET name=CONCAT(v_name,v_id)
WHERE id=v_id;
ENDIF;
END LOOP;
SELECT v_count;
--커서를닫는다.
CLOSE cursor1;
END$$
DELIMITER;

cursor1에서 select한 데이터를 모두 갖고 있고

fetch를 통해 cursor의 데이터를 변수에 담고

변수에 담은 데이터를 하나씩 LOOP를 돌면서

IF문에 걸릴경우 UPDATE나 INSERT문을 만나

처리를 진행하게 된다.

LOOP를 돌릴때마다 변수의 count를 올리고 있다.

 

4. 프로시저 호출하기

CALLtest_proc1();
 

결과

'프로그래밍 언어 > SQL' 카테고리의 다른 글

[SQL] 키(슈퍼키,대체키,후보키,기본키,외래키)  (0) 2022.07.11
[SQL] DDL, DML, DCL 이란?  (0) 2022.07.09
[SQL] 중첩 트리거 (Nested Trigger)  (0) 2022.06.12
[SQL] 트리거  (0) 2022.06.12
[SQL] 비번 재설정 하는 방법  (1) 2022.06.07
    '프로그래밍 언어/SQL' 카테고리의 다른 글
    • [SQL] DDL, DML, DCL 이란?
    • [SQL] 중첩 트리거 (Nested Trigger)
    • [SQL] 트리거
    • [SQL] 비번 재설정 하는 방법
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바