inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

공공데이터 CSV 파일을 이용해 테이블 만들기

13강 zip_code DB(우편번호/주소)

[13강.zip_code_DB]변경분 처리sql관련

258

류재안

작성한 질문수 58

0

안녕하세요.

세세한 설명 감사드립니다.

sql 초급이라 자세한 설명에 맞추어 잘 따라가고 있었는데요.

13강의 변경분처리 sql 에대해

loop 처리관련하여서는

전체 코드를 좀 공유해주시면 안될까요?

개념적으로는 알곘는데

아직 loop 문과 변수에 대해서 적용하는 것에는 익숙하지가 않아서 어떻게 해야 할 지를 모르겠습니다. ㅡㅡ;

sql mariadb heidisql

답변 1

1

SQL뱅크

안녕하세요 류재안님.

말씀하시는 내용을 보니 해당 내용에 대한 솔루션보다는 프로시저나 루프에 관해 도움이 될만한 내용을 답변드리는 것이 더 나을 듯 판단됩니다.

아래 링크에 MariaDB 프로시저와 관련된 샘플 및 소스, 컴파일 방법 등을 your_table에 맞도록 수정하여 놓았습니다. 소스 중 UPDATE와 LOOP 부분을 참고하시면 좋을 듯하며 이곳에는 프로시저 소스코드만 기재합니다.

MariaDB 프로시져 예제 링크

이하 소스 코드)

/*
-- 이하 코드 모두를 선택하여 HeidiSQL창에 붙여넣고 전체 컴파일
*/
DELIMITER $$
 
CREATE OR   REPLACE  PROCEDURE   pr_cursor_exam(
    IN    Param1 VARCHAR(20),
    OUT   Param2 INT,
    OUT   Param3 INT
)
 
BEGIN
    DECLARE   v_uid VARCHAR(20);
    DECLARE   v_name VARCHAR(100);
    DECLARE   v_age INT DEFAULT   0;
    DECLARE   v_birthday DATE;
    DECLARE   v_isnosql TINYINT  DEFAULT  0;
 
    DECLARE   tot_age, avg_age INT  DEFAULT  0;
    DECLARE   rowcnt INT   DEFAULT   0; -- 커서에 담긴 데이터의 카운트
 
    DECLARE   EOR BOOLEAN   DEFAULT   FALSE; -- 커서의 끝 여부
 
    DECLARE   resultCursor CURSOR   FOR
        SELECT   uid, name, COALESCE(age,0), birthday, isnosql
        FROM   your_table
        WHERE   birthday > STR_TO_DATE(Param1,'%Y%m%d');
 
    DECLARE   CONTINUE   HANDLER FOR   NOT FOUND
        SET   EOR = TRUE;
 
    OPEN   resultCursor;
 
    curloop: LOOP
    FETCH   resultCursor INTO   v_uid,v_name,v_age,v_birthday,v_isnosql;
    IF   EOR THEN  LEAVE curloop;
    END   IF;
 
    SET   rowcnt = rowcnt + 1;
    SET   tot_age = tot_age + v_age;
 
    -- 업데이트문 예시 시작
    IF   v_isnosql = 1  THEN
        UPDATE   your_table SET  name=CONCAT(name,' -NOSQL')
        WHERE   isnosql = v_isnosql;
    END   IF;
    -- 업데이트문 예시 끝
 
    END   LOOP  curloop;
 
    IF   rowcnt = 0 THEN
        SET   rowcnt = 0;
        SET   avg_age = 0;
    ELSE
       SET   avg_age = tot_age/rowcnt;
    END   IF;
 
    SELECT   FLOOR (rowcnt) INTO   Param2;
    SELECT   FLOOR (avg_age) INTO   Param3;
 
    CLOSE   resultCursor;
 
END $$
 
DELIMITER ;

열공하시는 모습 응원합니다.

노션 링크도 안 열리고, 알려준 vercel도 실행이 안됩니다.

0

2

1

코드를 첨부해야하는 이유가 있나요?

0

20

2

간단한 오타 제보입니다.

0

18

1

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

34

2

실제 FK제약조건을 설정하지 않는이유

0

34

2

Free Edition 실습 영상은 아직 업데이트전인가요?

0

22

1

상품 정보 크롤링

0

29

2

강의에 적용한 스크립트를 받아 볼수 있을까요?

0

40

2

실습소실행안되요

0

37

1

수강기간 연장

0

27

1

BCNF 질문

0

49

2

연관 엔티티 네이밍 규칙

0

39

1

ORA-01017 오류 때문에 진도가 못나가고있습니다.!

0

37

2

히스토리 관련 질문

0

57

2

SSMS 설치 오류

0

50

1

제공된 홈페이지 로그인 ,출력값, 건의사항 오류

1

46

1

최신 하드웨어에서 SQL Express 설치에러 해결법

0

59

1

자료가 남지않은 프로젝트는 어떻게 적어야 할까요?

0

41

2

진짜 강의 듣는거 너무 고문

0

113

1

vs code

0

48

2

맥북용 자료 부탁드립니다.

0

37

2

로그인이 안되네요

0

33

1

[14강 도로명 주소db 구축(2)]관련

1

432

2

[14강]도로명주소 DB구축(1) 관련

1

509

2