반응형
해당 글에서는 프로시저를 이용하여 Dummy 데이터를 만들어 테스트 단계에서 사용하기 위해 만드는 방법에 대해 공유합니다.
💡 [참고] 저장 프로시저에 대해 관심이 있으시면 아래의 글도 도움이 됩니다.
분류 | 링크 |
[DB/Postgres] PL/pgSQL 이해-1 : Function, Stored Procedure | https://adjh54.tistory.com/159 |
[DB/Postgres] PL/pgSQL 구성하기 -2 : DBeaver 기반 구축 및 활용 | https://adjh54.tistory.com/168 |
[DB/Postgres] 저장 프로시저로 Dummy 데이터 만드는 방법 | https://adjh54.tistory.com/401 |
[DB/Postgres] 저장 프로시저 매개변수 사용방법: IN, OUT, INOUT | https://adjh54.tistory.com/408 |
[DB/Postgres] PL/pgSQL 함수, 프로시저 예외처리 사용방법 : Exception Handling | https://adjh54.tistory.com/413 |
[DB/Postgres] SQLSTATE Code 목록 : SQL 오류코드 | https://adjh54.tistory.com/412 |
[Java] MyBatis에서 저장 프로시저 호출 방법 | https://adjh54.tistory.com/409 |
1) 저장 프로시저(Stored Procedure)
💡 저장 프로시저(Stored Procedure)
- 하나 이상의 ‘입력 인수’를 받아서 ‘결과를 반환’하는 일련의 작업을 수행하는 SQL 코드 블록을 의미합니다.
- 해당 일련의 작업은특정 ‘작업’을 수행하기 위해서 수행되며 ‘입력’을 받아서 처리한 후 결과값은 ‘반환할 수도 있고 반환하지 않을 수도’ 있습니다.
- 특정 작업은 데이터베이스 내의 데이터를 조작하고 업데이트를 하는 작업을 의미합니다.데이터 베이스 내부에서 실행되며 애플리케이션 개발자가 호출하여 실행할 수 있습니다.
1. 기본 구조
CREATE [OR REPLACE] PROCEDURE procedure_name (arguments)
LANGUAGE plpgsql
AS $$
DECLARE
-- 변수 선언 영역
BEGIN
-- 저장 프로시저 로직 영역
END;
$$;
키워드 | 설명 |
CREATE [OR REPLACE] PROCEDURE | 저장 프로시저를 생성합니다. OR REPLACE를 사용하면 새 버전으로 기존 저장 프로시저를 업데이트합니다. |
procedure_name | 저장 프로시저의 이름을 정의합니다. |
arguments | 저장 프로시저의 인수를 정의합니다. |
DECLARE | 저장 프로시저 내에서 사용할 변수를 선언합니다. |
BEGIN, END | 저장 프로시저의 논리를 정의합니다. |
$$; | 저장 프로시저를 종료합니다. |
💡 [참고] PL/pgSQL에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
2) 저장 프로시저(Stored Procedure) Dummy 데이터 구성
💡 Dummy 데이터
- 실제 데이터의 속성을 가지고 있지만, 실제 의미는 없는 테스트용이나 모델링용 데이터를 말합니다.
- 개발 단계에서 많은 데이터를 통해 테스트가 필요한 경우 dummy 데이터를 추가하여 임시로 테스트를 수행합니다.
1. 테이블 구조
💡 테이블 구조
- tb_user 라는 테이블을 구성하였습니다.
- 테이블의 컬럼으로는 시퀀스, 아이디, 패스워드, 이름, 상태로 구성이 되어 있습니다.
- Primary Key로는 user_sq에 Serial 타입을 주어서 Auto Increment가 되도록 구성하였습니다.
-- DDL
create table tb_user
(
user_sq SERIAL not null
primary key,
user_id text,
user_pw text,
user_nm text,
user_st text
);
alter table tb_user
owner to localmaster;
2. 프로시저 구성
💡 프로시저 구성
- 프로시저는 LOOP를 100번 수행하면서 Dummy 데이터를 tb_user 테이블에 쌓습니다
- INSERT를 수행한 뒤 LOOP_CNT는 1씩 증가합니다.
💡 컬럼 구성
- user_id는 랜덤 한 난수 5개의 숫자와 문자 조합의 난수를 생성하도록 하였습니다.
- user_pw는 패스워드로 ‘1234’로 고정하였습니다.
- user_name은 파라미터로 받은 값을 기반으로 동일한 이름을 만들도록 하였습니다.
- user_st는 모두 ‘A’ 상태인 Active 상태로 구성하였습니다.
CREATE OR REPLACE PROCEDURE PROC_INSERT_SAME_USER(IN pi_user_name TEXT)
LANGUAGE plpgsql
AS $$
DECLARE
LOOP_CNT INTEGER;
LOOP_TIME INTEGER;
BEGIN
-- 지역변수로 사용할 변수 지정
LOOP_CNT := 0;
-- 반복 구문
WHILE LOOP_CNT < 100 LOOP
INSERT INTO TB_USER (user_id, user_pw, user_nm, user_st)
VALUES(SUBSTRING(gen_random_uuid()::text, 1, 5), '1234', pi_user_name, 'A');
LOOP_CNT := LOOP_CNT + 1;
END LOOP;
COMMIT;
END;
$$;
💡 최초 해당 SQL문을 실행하면 아래와 같이 프로시저가 생성됩니다.
3. 프로시저 호출
💡 프로시저 호출
- 홍길동이라는 동일한 이름을 파라미터로 전달하고 호출합니다.
CALL proc_insert_same_user('홍길동');
4. 결과 확인
💡 결과 확인
- 아래와 같이 총 100개의 데이터가 생성됨을 확인하였습니다.
오늘도 감사합니다. 😀
반응형
'DB > 환경설정' 카테고리의 다른 글
[DB/MySQL] MySQL 8.0 초기 환경 세팅 및 최초 구성 방법 : MacOS (2) | 2024.03.29 |
---|---|
[DB] Redis(Remote Dictionary Server) 이해하기 -2 : MacOS 로컬 환경 구성 및 명령어 (2) | 2024.03.16 |
[DB] MacOS에서 PostgreSQL 로컬 데이터베이스 구성 방법 (2) | 2022.11.14 |