일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Node.js
- simple case expression
- git
- SQLD
- python
- 정보처리기사
- 코드 스니펫
- Oracle
- SQL
- GROUPING
- 비절차적 데이터 조작어
- dom
- 뷰
- 문법 차이
- 자료구조
- html
- execute immediate
- list multiplication
- 위코드
- sql 저장 모듈
- dense rank
- JavaScript
- 정규식 연산
- searched case expression
- window 함수
- ROLLUP
- show graph characteristics
- coalesce
- 기업 협업
- MYSQL
- Today
- Total
프로그래밍 숲
프로시저로 고객 테이블에 들어갈 더미데이터 만들기 + 한국 이름 랜덤 만들기 본문
프로젝트를 하던 중, 고객 정보가 들어간 더미데이터를 만들 필요가 있었습니다. 그래서 어떻게 간편하게 많은 더미데이터를 만들까 하다가 SQL의 프로시저를 활용해서 더미데이터를 만들어 보기로 했습니다.
✏️ 파이썬 Faker 라이브러리로 한국 이름 랜덤 생성하기
한국 사람의 이름 같은 경우, 프로시저를 이용해서 랜덤으로 구현하기가 어려워서 파이썬의 Faker 라이브러리를 통해 간편하게 만들었습니다. 만드는 방법은 다음과 같습니다.
from faker import Faker
fake = Faker('ko_KR')
name_list = []
for _ in range(100):
name_list.append(fake.name())
names = ','.join(name_list)
print(names)
터미널에서 출력된 names의 값을 곧 사용하도록 하겠습니다.
✏️ 프로시저로 더미데이터 만들기
그 다음에 프로시저로 더미데이터를 만들어보겠습니다.
프로시저란?
프로시저(Procedure)는 데이터베이스에서 저장된 일련의 SQL 문들을 실행하는 데 사용되는 이름이 있는 블록입니다. 프로시저를 사용하면 일련의 작업을 단일 단위로 묶을 수 있으며, 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.
프로시저의 기본 구조
프로시저의 기본 구조는 다음과 같습니다.
CREATE PROCEDURE 프로시저이름()
BEGIN
-- 변수 선언
-- 반복문 등 로직 작성
-- SQL 문 실행
-- 변수 값 변경 등의 로직
END;
더미 데이터용 프로시저 만들기(고객 데이터)
CREATE PROCEDURE InsertCustomerDummyData() // 프로시저 만들기
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE randomID VARCHAR(255);
DECLARE randomPassword VARCHAR(255);
DECLARE randomContactInfo VARCHAR(255);
DECLARE randomName VARCHAR(255);
DECLARE NameList TEXT DEFAULT '심지훈,박지후,김준영,박재호,백영호,이영식,김혜진,김채원,김준혁,나경수,김지훈,김영일,성도윤,김은주,정하은,안지혜,최순자,박도현,곽경수,심준호,김영숙,최승현,박주원,이상훈,김영환,김현우,김순자,박정웅,김지원,류명자,김윤서,송승민,노현정,구정호,김병철,김지현,양정훈,박유진,이도윤,박영길,김유진,최상호,최지현,안지혜,고영일,박지아,김주원,김민수,김성민,박영미,손미정,김영환,이현우,김은주,김현숙,한명숙,이민서,민경자,김순옥,서성호,정선영,김시우,김상훈,하동현,조지민,최성호,최명숙,윤민지,김영식,이영미,이준혁,김준호,송현주,김우진,이정웅,한현우,박영철,곽지현,하은경,김춘자,김예원,박현정,양영희,양주원,남은경,이영미,송미정,김은지,이성호,안정남,박도윤,김정웅,서서영,김상호,김성민,허상훈,송상호,박영길,강은영,배서영';
WHILE i < 100 DO
SET randomID = CONCAT('user', LPAD(FLOOR(RAND() * 99999999.99), 8, '0'));
SET randomPassword = CONCAT('pass', LPAD(FLOOR(RAND() * 99999999.99), 8, '0'));
SET randomContactInfo = CONCAT('010', LPAD(FLOOR(RAND() * 9999), 4, '0'), LPAD(FLOOR(RAND() * 9999), 4, '0'));
SET randomName = SUBSTRING_INDEX(SUBSTRING_INDEX(NameList, ',', i+1), ',', -1);
INSERT INTO hanaroDB.customers (name, contact_info, cus_id, password)
VALUES (randomName, randomContactInfo, randomID, randomPassword);
SET i = i + 1;
END WHILE;
END;
//
DELIMITER ;
CALL InsertCustomerDummyData(); // 프로시저 실행시키기
DROP PROCEDURE IF EXISTS InsertCustomerDummyData; // 프로시저 이미 같은 이름으로 생성되어 있는경우 삭제하기
위 프로시저는 제가 고객 데이터에 들어갈 더미 데이터를 만들기 위해서 생성한 프로시저입니다. 위에서 사용된 주요 구문을 살펴보도록 하겠습니다.
- DECLARE: 변수를 선언하는 구문입니다. DECLARE 변수명 데이터타입 DEFAULT 초기값 형식으로 사용합니다.
- SET: 변수에 값을 할당하는 구문입니다. SET 변수명 = 값 형식으로 사용합니다.
- INSERT INTO: 데이터를 특정 테이블에 삽입하는 구문입니다. INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...) 형식으로 사용합니다.
위의 코드에서 InsertCustomerDummyData 프로시저는 NameList 변수에 선언된 이름 목록에서 랜덤한 이름을 선택하여 customers 테이블에 더미 데이터를 삽입하는 작업을 100번 반복합니다. 각 반복에서 랜덤한 ID, 비밀번호, 연락처 정보가 생성되어 데이터베이스에 삽입됩니다.
프로시저 실행
프로시저를 실행하기 위해서는 CALL 프로시저이름() 형식으로 사용합니다.
CALL InsertCustomerDummyData();
InsertCustomerDummyData 프로시저를 실행하는 구문입니다.
프로시저 삭제
마지막으로, 프로시저를 삭제하기 위해 다음 구문을 사용합니다.
DROP PROCEDURE IF EXISTS 프로시저이름;
DROP PROCEDURE IF EXISTS는 해당 이름의 프로시저가 이미 존재하는 경우에만 프로시저를 삭제합니다. 저는 프로시저를 처음 만들다가 잘못 만든 경우에 사용하였습니다.
'프로그래밍_인포 > 데이터베이스&SQL' 카테고리의 다른 글
Datagrip의 Show Graph Characteristics 알아보기 (0) | 2023.06.29 |
---|---|
ISNULL, NVL, NULLIF, COALESCE 알아보기 (0) | 2023.06.17 |
Searched Case Expression과 Simple Case Expression 문법 비교 (0) | 2023.06.16 |
SQL 저장 모듈 소개: 프로시저, 사용자 정의함수, 트리거 한눈에 알아보기 (0) | 2023.06.15 |
Oracle 데이터베이스 관리를 위한 PL/SQL 기초 안내서 (0) | 2023.06.14 |