- 하나 이상의 ‘입력 인수’를 받아서 ‘결과를 반환’하는 일련의 작업을 수행하는 SQL 코드 블록을 의미합니다.
- 해당 일련의 작업은특정 ‘작업’을 수행하기 위해서 수행되며 ‘입력’을 받아서 처리한 후 결과값은 ‘반환할 수도 있고 반환하지 않을 수도’ 있습니다. - 특정 작업은 데이터베이스 내의 데이터를 조작하고 업데이트를 하는 작업을 의미합니다.데이터 베이스 내부에서 실행되며 애플리케이션 개발자가 호출하여 실행할 수 있습니다.
1. 기본 구조
CREATE [OR REPLACE] PROCEDURE procedure_name (arguments)
LANGUAGE plpgsql
AS $$
DECLARE
-- 변수 선언 영역
BEGIN
-- 저장 프로시저 로직 영역
END;
$$;
키워드
설명
CREATE [OR REPLACE] PROCEDURE
저장 프로시저를 생성합니다. OR REPLACE를 사용하면 새 버전으로 기존 저장 프로시저를 업데이트합니다.
- 실제 데이터의 속성을 가지고 있지만, 실제 의미는 없는 테스트용이나 모델링용 데이터를 말합니다. - 개발 단계에서 많은 데이터를 통해 테스트가 필요한 경우 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;
$$;