[DB] 복잡한 쿼리 처리를 위한 MySQL Procedure 이야기
데이터베이스 서버에서 데이를 가져올 때 엑셀에서는 한번에 한번의 쿼리(Query)만 처리할 수 있습니다.
처리 과정은 아래와 같습니다. ODBC를 통해 연결 설정을 해 놓으면 쉽습니다.
1. 서버에 연결
2. 서버에 Query 전송
3. 결과 받고 서버와의 연결 종료
VBA로 DB를 처리 할 때 한번의 쿼리를 해결할 때는 아무런 문제가 없습니다.
제 고민의 시작은 인터넷 환경이 열악한 곳에서
어떤 결과 값을 받아 내기 위해서, 여러번 쿼리를 보내서 결과를 받아 쿼리를 다시 생성해서 보내고,
받고 보내고를 반복하다 보니 최종 결과물을 받아내는데 시간이 많이 걸리는 것이었습니다.
가령, 관계형 데이터 베이스,
ID로 특정 필드의 값을 조회하고, 그 필드의 값으로 어떠한 결과를 찾아서,
출력 데이터를 가공해서 최종 결과물을 얻어 내는 것이었습니다.
또는, 새로은 레코드를 삽입해서 생성된 ID값을 반환 받아, 그 레코드를 로그 기록 테이블에 추가한다던가,
특정 값을 가진 여러개의 테이블에 동시에 업데이트 한다던가 할 때,
여러 번의 쿼리를 날려서 처리하는 것은 매우 비 효율적입니다.
이럴 때 매우 유용한 기능이 MySQL에 있는 Stored Procedure, Stored Function입니다.
이 안에 여러개의 처리 과정을 구현하고, 최종 결과 값을 받게 하면,
한번이 쿼리로 해결이 됩니다.
이러한 기능이 미이 있는 걸로 봐서는
이전의 수많은 프로그래머들이 저와 같은 고민을 이미 했었다는 의미겠지요.
아래는 제가 사용하는 간단한 프로시저 예입니다.
저와 같은 고민이 있으신 분들은 Stored Procedure 공부를 한번 해보셔요.
복잡한 쿼리 처리해는데는 정말 유용합니다.
번호 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
[📚진짜쓰는 실무엑셀] IT/오피스 '1위' 베스트셀러! 엑셀 공부, 이 교재로 마스터하세요! (313)
![]() ![]() |
![]() ![]() |
2022.02.03 | 572 | 599389 | |
78094 |
[M365] 수식으로 고급필터 구현하기
![]() ![]() |
![]() |
2025.04.11 | 1 | 66 |
78009 |
LOOKUP을 XLOOKUP 처럼 사용 (2019 이하 필독)
![]() ![]() |
![]() |
2025.04.06 | - | 89 |
78002 |
[VBA] 괄호가 대응되게 문자열 잘라주는 함수
![]() |
![]() |
2025.04.05 | - | 39 |
77792 |
엑셀 그림 삽입이 안될 때.. (그림 삽입 비활성화 해결)
(1)
![]() ![]() |
![]() ![]() |
2025.03.24 | 2 | 333 |
77667 |
언피벗 툴 업그레이드 버전입니다.
![]() ![]() |
![]() |
2025.03.17 | - | 92 |
77635 |
머리글로 데이터 합치기 툴
![]() ![]() |
![]() |
2025.03.15 | 1 | 105 |
77598 |
MERGE(자석처럼 자료 붙이기) 툴입니다.
![]() ![]() |
![]() |
2025.03.13 | - | 142 |
77577 |
[VBA] 시트명들 가져오는 함수
![]() ![]() |
![]() |
2025.03.12 | 1 | 101 |
77544 |
LOOKUP 함수 사용법(2019 이하 필독)
![]() ![]() |
![]() |
2025.03.11 | - | 174 |
77543 |
[함수TIP] Date함수로 Eomonth함수 대체하기
(3)
![]() |
![]() |
2025.03.11 | 3 | 62 |
77481 |
쉽게 쓸 수 있는 언피벗 툴
![]() ![]() |
![]() |
2025.03.08 | 2 | 105 |
77468 |
월간단위 월주차 함수
![]() ![]() ![]() |
![]() ![]() |
2025.03.07 | - | 124 |
77385 |
TEXTJOIN 을 SUMPRODUCT 공식으로 2차원 데이터 다루기
![]() ![]() |
![]() |
2025.03.04 | - | 87 |
77355 |
TEXTJOIN 으로 2차원 데이터 다루기
![]() ![]() |
![]() |
2025.03.02 | 1 | 89 |
77353 |
& 기호로 SUMPRODUCT 2차원 데이터 다루기
![]() ![]() |
![]() |
2025.03.02 | - | 66 |
77351 |
단어 포함 여부 검색, 원하는 단어로 출력
![]() ![]() |
![]() |
2025.03.02 | 1 | 96 |
77238 |
휴일이면 1 아니면 0이 나오는 함수
![]() ![]() |
![]() |
2025.02.24 | - | 134 |
77072 |
SUMPRODUCT로 VLOOKUP 대체 (2차원 룩업 가능)
![]() ![]() |
![]() |
2025.02.16 | - | 242 |
76915 |
SUMPRODUCT로 2차원 데이터 다루기[응용]
![]() ![]() |
![]() |
2025.02.09 | 1 | 214 |
76913 |
SUMPRODUCT로 2차원 데이터 sumifs 처럼 다루기
![]() ![]() |
![]() |
2025.02.09 | - | 170 |
@dra**** 님 MySQL 자체에서도 함수를 구현할 수 있다는걸 처음 알았습니다
@더블유에이 님 mysql 안에 저장해 놓고 불러 쓰는 함수인데, 매우 유용합니다. 과거의 고민 들 싹 사라 졌습니다.
@dra**** 님 DB연결 시, connectionString에 OPTION=67108864를 추가하면 쿼리문 여러 개 활용이 가능합니다.
https://stackoverflow.com/questions/4144961/multiple-insert-statements-in-single-odbc-executenonquery-c
https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html
@lunashiel 님 뭐리 결과값을 받아 다시 쿼리로 처리하는데는 프로시져를 쓸 수 밖에 없지만,
지금 올려주신 커넥션스트링은 단순 여러개의 쿼리를 처리할 때 매우 유용할 듯 합니다.
이거를 그리도 찾았다가 여러번 실패 했는데, 다음번 프로젝트 코딩때 유용하게 사용하겠습니다.
감사합니다. ^^