멀티캠퍼스

[2026.05.15] - TIL 31일차 SQL INDEX, PL/SQL, PROCEDURE, FUNCTION, TRIGGER 정리

buckwheat 2026. 5. 18. 04:05

 

목차

1 INDEX
2 SQL 주요 개념 복습
3 PL/SQL
4 PL/SQL 변수
5 레퍼런스 변수
6 ROWTYPE
7 IF문
8 반복문
9 예외처리
10 PROCEDURE
11 FUNCTION
12 TRIGGER
13 재고 관리 트리거 예제

1 INDEX

1) INDEX의 개념

 

    (1) INDEX의 역할

    INDEX는 SQL 조회 속도를 향상시키기 위한 데이터베이스 객체이다.

    책의 목차처럼 원하는 데이터를 더 빠르게 찾을 수 있도록 도와준다.

 

    (2) INDEX를 사용하는 이유

    테이블에 데이터가 많아지면 WHERE 조건으로 원하는 데이터를 찾는 데 시간이 오래 걸릴 수 있다.

    자주 검색하는 컬럼에 INDEX를 만들면 데이터 검색 속도를 높일 수 있다.

 

2) INDEX의 장점과 단점

 

    (1) 장점

    INDEX를 사용하면 조건 검색 속도가 빨라질 수 있다.

    특히 사원번호, 주민등록번호, 부서코드처럼 자주 조회되는 컬럼에 효과적이다.

 

    (2) 단점

    테이블 데이터가 자주 추가, 수정, 삭제되면 INDEX도 함께 다시 관리되어야 한다.

    그래서 변경이 많은 테이블에서는 오히려 성능이 떨어질 수 있다.

 

    (3) 저장 공간 필요

    INDEX는 별도의 데이터베이스 객체이므로 저장 공간을 추가로 사용한다.

    너무 많은 INDEX를 만들면 공간 낭비와 성능 저하가 발생할 수 있다.

 

3) INDEX 데이터 사전

 

    (1) USER_IND_COLUMNS

    USER_IND_COLUMNS는 현재 계정이 가진 인덱스 컬럼 정보를 확인할 수 있는 데이터 사전이다.

    어떤 테이블의 어떤 컬럼에 INDEX가 설정되어 있는지 확인할 때 사용한다.

 

4) UNIQUE INDEX

 

    (1) UNIQUE INDEX의 역할

    UNIQUE INDEX는 중복되지 않는 값을 기준으로 생성되는 인덱스이다.

    PRIMARY KEY나 UNIQUE 제약조건을 설정하면 Oracle이 자동으로 고유 인덱스를 생성한다.

 

    (2) 사용 상황

    EMP_NO처럼 중복되면 안 되는 컬럼에 사용한다.

    해당 컬럼으로 조회할 때 검색 속도를 높이는 데 도움을 준다.

 

5) 비고유 INDEX

 

    (1) 비고유 INDEX의 역할

    비고유 INDEX는 중복값이 존재할 수 있는 컬럼에 생성하는 인덱스이다.

    부서코드처럼 같은 값이 여러 행에 반복되지만 자주 검색되는 컬럼에 사용할 수 있다.

 

    (2) 사용 상황

    DEPT_CODE를 조건으로 사원을 자주 조회한다면 DEPT_CODE 컬럼에 INDEX를 만들 수 있다.

    자주 사용하는 검색 조건을 기준으로 INDEX를 설계하는 것이 중요하다.

 

6) INDEX 삭제

 

    (1) DROP INDEX

    DROP INDEX는 생성된 인덱스를 삭제할 때 사용하는 명령어이다.

    더 이상 필요 없거나 성능에 도움이 되지 않는 INDEX는 삭제할 수 있다.


2 SQL 주요 개념 복습

1) DDL

 

    (1) DDL의 역할

    DDL은 데이터베이스 객체를 정의하는 명령어이다.

    테이블, 뷰, 시퀀스, 인덱스 같은 객체를 생성하거나 수정하거나 삭제할 때 사용한다.

 

    (2) 대표 명령어

    CREATE, ALTER, DROP이 DDL에 해당한다.

    객체의 구조 자체를 다룬다는 특징이 있다.

 

2) DML

 

    (1) DML의 역할

    DML은 테이블 안의 데이터를 조작하는 명령어이다.

    데이터를 추가, 조회, 수정, 삭제할 때 사용한다.

 

    (2) CRUD

    CREATE는 INSERT, READ는 SELECT, UPDATE는 UPDATE, DELETE는 DELETE에 해당한다.

    데이터 처리의 기본 흐름을 CRUD라고 부른다.

 

3) DCL과 TCL

 

    (1) DCL

    DCL은 데이터 접근 권한을 제어하는 명령어이다.

    GRANT는 권한 부여, REVOKE는 권한 회수에 사용한다.

 

    (2) TCL

    TCL은 트랜잭션을 제어하는 명령어이다.

    COMMIT은 변경 내용을 확정하고, ROLLBACK은 변경 내용을 취소한다.

 

4) SET OPERATOR

 

    (1) SET OPERATOR의 역할

    SET OPERATOR는 여러 SELECT 결과를 집합처럼 다루는 명령어이다.

    두 결과를 합치거나, 공통 부분만 찾거나, 차이를 구할 때 사용한다.

 

    (2) 종류

    UNION은 중복을 제거한 합집합, UNION ALL은 중복을 포함한 합집합이다.

    INTERSECT는 교집합, MINUS는 차집합을 의미한다.

 

5) JOIN

 

    (1) INNER JOIN

    INNER JOIN은 두 테이블에서 조건이 일치하는 데이터만 연결해서 조회한다.

    양쪽 테이블에 모두 존재하는 데이터만 결과에 포함된다.

 

    (2) OUTER JOIN

    OUTER JOIN은 일치하지 않는 데이터도 포함해서 조회할 수 있다.

    LEFT, RIGHT, FULL JOIN으로 나뉜다.

 

6) Oracle 객체

 

    (1) 객체의 종류

    Oracle에서 사용하는 주요 객체에는 USER, TABLE, VIEW, SEQUENCE, INDEX 등이 있다.

    데이터 저장, 조회, 자동 번호 생성, 검색 속도 향상 같은 목적에 따라 다양한 객체를 사용한다.


3 PL/SQL

1) PL/SQL의 개념

 

    (1) PL/SQL의 역할

    PL/SQL은 Oracle에서 제공하는 절차적 SQL 언어이다.

    기본 SQL에 변수, 조건문, 반복문, 예외처리 같은 프로그래밍 기능을 추가한 형태이다.

 

    (2) PL/SQL을 사용하는 이유

    일반 SQL은 한 번에 하나의 명령을 실행하는 데 초점이 있다.

    PL/SQL은 여러 SQL 작업을 하나의 흐름으로 묶어 동적으로 처리할 수 있다.

 

2) PL/SQL 기본 구조

 

    (1) DECLARE

    DECLARE는 변수나 상수를 선언하는 선언부이다.

    필요한 변수를 미리 만들어두고 실행부에서 사용할 수 있다.

 

    (2) BEGIN

    BEGIN은 실제 실행할 코드가 시작되는 부분이다.

    SELECT, INSERT, UPDATE, DELETE 같은 SQL문과 조건문, 반복문을 작성한다.

 

    (3) EXCEPTION

    EXCEPTION은 실행 중 오류가 발생했을 때 처리할 코드를 작성하는 부분이다.

    오류가 발생해도 프로그램이 바로 중단되지 않도록 예외 상황을 제어할 수 있다.

 

    (4) END

    END는 PL/SQL 블록의 끝을 의미한다.

    PL/SQL 실행 블록은 BEGIN으로 시작해서 END로 마무리된다.


4 PL/SQL 변수

1) 변수의 개념

 

    (1) 변수의 역할

    변수는 값을 임시로 저장하기 위한 공간이다.

    SQL 조회 결과를 저장하거나, 계산 결과를 담아두고 나중에 사용할 수 있다.

 

    (2) 변수 선언

    PL/SQL에서는 DECLARE 영역에서 변수명과 자료형을 작성해 변수를 선언한다.

    예를 들어 사원번호를 저장할 변수는 NUMBER 타입으로 선언할 수 있다.

 

2) SELECT INTO

 

    (1) SELECT INTO의 역할

    SELECT INTO는 조회한 값을 변수에 저장할 때 사용한다.

    SQL 조회 결과를 PL/SQL 내부에서 다시 활용하고 싶을 때 필요하다.

 

    (2) 사용 상황

    사원 이름으로 사원번호를 조회한 뒤, 그 사원번호를 변수에 저장할 수 있다.

    이후 저장된 사원번호를 이용해 다시 사원명을 조회하는 식으로 사용할 수 있다.

 

3) DBMS_OUTPUT.PUT_LINE

 

    (1) 출력 기능

    DBMS_OUTPUT.PUT_LINE은 PL/SQL 실행 결과를 화면에 출력할 때 사용한다.

    변수에 어떤 값이 들어갔는지 확인하거나 처리 결과 메시지를 출력할 수 있다.

 

    (2) 문자열 연결

    PL/SQL에서도 Oracle SQL처럼 || 연산자를 사용해 문자열과 변수 값을 이어 붙일 수 있다.

    예를 들어 ID= 뒤에 변수에 저장된 사원번호를 붙여 출력할 수 있다.

 

4) 변수 값 대입

 

    (1) 대입 연산자

    PL/SQL에서 변수에 값을 넣을 때는 := 기호를 사용한다.

    SQL의 =와 다르게, PL/SQL 변수에 값을 저장할 때는 :=를 사용한다.

 

    (2) 사용 상황

    조회한 값을 바꾸거나, 계산한 값을 변수에 저장할 때 사용한다.

    프로그램 실행 중 임시 값을 관리하는 데 필요하다.


5 레퍼런스 변수

1) %TYPE

 

    (1) %TYPE의 역할

    %TYPE은 특정 테이블의 컬럼 자료형을 그대로 참조해 변수를 선언하는 방법이다.

    컬럼의 자료형이 바뀌어도 변수 선언을 직접 수정하지 않아도 되는 장점이 있다.

 

    (2) 사용 이유

    EMPLOYEE 테이블의 EMP_ID 컬럼 타입을 그대로 사용하고 싶다면 EMPLOYEE.EMP_ID%TYPE처럼 선언할 수 있다.

    테이블 컬럼과 변수의 자료형을 일치시켜 오류를 줄일 수 있다.

 

2) 레퍼런스 변수의 장점

 

    (1) 유지보수 편리

    컬럼 자료형이 변경되어도 %TYPE을 사용한 변수는 자동으로 해당 컬럼 타입을 따라간다.

    코드 수정 부담을 줄일 수 있다.

 

    (2) 타입 불일치 방지

    변수 타입을 직접 작성하면 실제 컬럼 타입과 다르게 선언할 수 있다.

    %TYPE을 사용하면 컬럼과 같은 타입을 사용하므로 타입 불일치 문제를 줄일 수 있다.


6 ROWTYPE

1) %ROWTYPE

 

    (1) %ROWTYPE의 역할

    %ROWTYPE은 한 테이블의 한 행 전체 구조를 참조하는 변수 선언 방식이다.

    테이블의 모든 컬럼 값을 한 번에 담을 수 있는 행 변수라고 볼 수 있다.

 

    (2) 사용 상황

    EMPLOYEE 테이블에서 특정 사원의 모든 정보를 한 번에 조회해 myrow 변수에 저장할 수 있다.

    이후 myrow.emp_id, myrow.emp_name, myrow.salary처럼 각 컬럼 값을 꺼내 사용할 수 있다.

 

2) %TYPE과 %ROWTYPE 차이

 

    (1) %TYPE

    %TYPE은 하나의 컬럼 자료형만 참조한다.

    특정 컬럼 값 하나를 저장할 변수에 적합하다.

 

    (2) %ROWTYPE

    %ROWTYPE은 테이블의 한 행 전체 구조를 참조한다.

    여러 컬럼을 한 번에 저장하고 사용할 때 적합하다.


7 IF문

1) IF문의 개념

 

    (1) IF문의 역할

    IF문은 조건에 따라 실행할 코드를 다르게 선택하는 제어문이다.

    특정 조건이 참이면 A 작업을 하고, 아니면 B 작업을 하도록 만들 수 있다.

 

    (2) 사용 상황

    사원의 직급코드가 J1이면 사장으로 처리하고, 그렇지 않으면 사원으로 처리할 수 있다.

    조건에 따라 출력 메시지나 INSERT 대상 테이블을 다르게 선택할 수 있다.

 

2) IF 구조

 

    (1) IF THEN

    IF THEN은 조건이 참일 때 실행할 문장을 작성하는 구조이다.

    조건이 맞는 경우에만 특정 작업을 수행한다.

 

    (2) ELSIF

    ELSIF는 앞 조건이 거짓일 때 다른 조건을 추가로 검사한다.

    여러 조건을 순서대로 확인해야 할 때 사용한다.

 

    (3) ELSE

    ELSE는 앞의 조건들이 모두 맞지 않을 때 실행되는 부분이다.

    나머지 경우를 처리할 때 사용한다.

 

    (4) END IF

    END IF는 IF문의 끝을 의미한다.

    PL/SQL에서는 조건문을 끝낼 때 반드시 END IF를 작성한다.

 

3) IF문과 INSERT

 

    (1) 조건별 테이블 저장

    IF문을 사용하면 사장과 사원을 구분해서 서로 다른 로그 테이블에 저장할 수 있다.

    조건에 따라 데이터 처리 위치를 다르게 지정할 수 있다.

 

    (2) 로그 테이블

    로그 테이블은 특정 작업이 발생했을 때 기록을 남기는 테이블이다.

    사원 정보를 처리하면서 처리 시간과 대상 정보를 저장할 수 있다.


8 반복문

1) LOOP

 

    (1) LOOP의 역할

    LOOP는 조건을 직접 작성해 반복을 제어하는 기본 반복문이다.

    반복할 내용을 실행하다가 EXIT 조건을 만나면 반복을 종료한다.

 

    (2) EXIT

    EXIT는 반복문을 즉시 종료할 때 사용한다.

    특정 조건이 되었을 때 반복을 멈추고 싶을 때 사용한다.

 

    (3) EXIT WHEN

    EXIT WHEN은 조건이 참이 되면 반복문을 종료하는 방식이다.

    IF문을 따로 작성하지 않고 종료 조건을 간단히 표현할 수 있다.

 

2) FOR문

 

    (1) FOR문의 역할

    FOR문은 정해진 범위만큼 반복할 때 사용하는 반복문이다.

    1부터 5까지처럼 반복 횟수가 정해져 있을 때 사용하기 좋다.

 

    (2) 카운트 변수

    FOR문에서는 반복에 사용할 카운트 변수가 자동으로 증가한다.

    시작값부터 종료값까지 순서대로 반복하며 값을 사용할 수 있다.

 

    (3) INSERT와 FOR문

    FOR문을 사용하면 여러 행을 반복해서 INSERT할 수 있다.

    예를 들어 1부터 10까지 번호와 날짜를 TEST_FOR 테이블에 저장할 수 있다.

 

3) WHILE문

 

    (1) WHILE문의 역할

    WHILE문은 조건이 TRUE인 동안 반복을 수행하는 반복문이다.

    반복 횟수가 명확하지 않고 조건에 따라 반복 여부가 결정될 때 사용한다.

 

    (2) 조건 변화

    WHILE문 안에서는 조건에 사용되는 값을 변경해야 한다.

    그렇지 않으면 조건이 계속 TRUE로 남아 무한 반복이 발생할 수 있다.


9 예외처리

1) EXCEPTION의 개념

 

    (1) EXCEPTION의 역할

    EXCEPTION은 PL/SQL 실행 중 오류가 발생했을 때 처리할 코드를 작성하는 영역이다.

    오류 상황을 예상하고 적절한 메시지나 대체 처리를 할 수 있다.

 

    (2) 예외처리가 필요한 이유

    데이터 중복, 조회 결과 없음, 조건 불일치 같은 상황이 발생하면 프로그램이 중단될 수 있다.

    예외처리를 사용하면 오류를 사용자에게 알리거나 다른 방식으로 흐름을 제어할 수 있다.

 

2) 대표 예외

 

    (1) NO_DATA_FOUND

    NO_DATA_FOUND는 SELECT INTO 결과가 없을 때 발생하는 예외이다.

    조건에 맞는 데이터가 없을 가능성이 있을 때 처리할 수 있다.

 

    (2) CASE_NOT_FOUND

    CASE_NOT_FOUND는 CASE문에서 일치하는 조건이 없고 ELSE도 없을 때 발생한다.

    CASE문을 사용할 때는 ELSE를 작성해 예외 상황을 줄이는 것이 좋다.

 

    (3) DUP_VAL_ON_INDEX

    DUP_VAL_ON_INDEX는 UNIQUE 인덱스가 적용된 컬럼에 중복 값을 넣거나 수정하려고 할 때 발생한다.

    중복이 허용되지 않는 컬럼을 다룰 때 사용할 수 있는 예외이다.


10 PROCEDURE

1) PROCEDURE의 개념

 

    (1) PROCEDURE의 역할

    PROCEDURE는 PL/SQL 코드를 미리 저장해두고 필요할 때 호출해서 실행하는 데이터베이스 객체이다.

    반복적으로 사용하는 작업을 하나의 기능처럼 만들어둘 수 있다.

 

    (2) PROCEDURE를 사용하는 이유

    자주 실행하는 INSERT, UPDATE, DELETE 작업을 매번 새로 작성하지 않아도 된다.

    이름만 호출하면 저장된 작업이 실행되므로 코드 재사용성이 높아진다.

 

2) PROCEDURE 생성 구조

 

    (1) CREATE OR REPLACE PROCEDURE

    CREATE OR REPLACE PROCEDURE는 프로시저를 새로 만들거나 기존 프로시저를 덮어쓸 때 사용한다.

    프로시저 이름 뒤에 실행할 PL/SQL 코드를 작성한다.

 

    (2) IS

    IS는 프로시저 내부에서 사용할 변수 선언 영역이 시작됨을 의미한다.

    필요한 변수가 없다면 바로 BEGIN으로 넘어갈 수 있다.

 

    (3) BEGIN과 END

    BEGIN과 END 사이에는 프로시저가 실행할 SQL문이나 PL/SQL 코드를 작성한다.

    프로시저를 호출하면 이 영역의 코드가 실행된다.

 

3) PROCEDURE 호출

 

    (1) EXEC

    EXEC 프로시저명 형태로 프로시저를 실행할 수 있다.

    간단히 저장된 프로시저를 호출할 때 사용한다.

 

    (2) BEGIN END 호출

    BEGIN과 END 사이에서 프로시저명을 작성해 호출할 수도 있다.

    다른 PL/SQL 코드와 함께 실행할 때 사용할 수 있다.


11 FUNCTION

1) FUNCTION의 개념

 

    (1) FUNCTION의 역할

    FUNCTION은 내부에서 계산한 값을 반환하는 데이터베이스 객체이다.

    Oracle의 SUM, MAX 같은 함수처럼 결과값을 돌려주는 기능을 만든다고 볼 수 있다.

 

    (2) PROCEDURE와 차이

    PROCEDURE는 특정 작업을 실행하는 데 초점이 있고, FUNCTION은 값을 계산해서 반환하는 데 초점이 있다.

    FUNCTION은 RETURN을 통해 결과값을 반드시 반환한다.

 

2) FUNCTION 구조

 

    (1) 매개변수

    FUNCTION은 실행할 때 외부에서 값을 전달받을 수 있다.

    예를 들어 사원번호를 전달받아 해당 사원의 보너스 금액을 계산할 수 있다.

 

    (2) RETURN 타입

    RETURN NUMBER처럼 함수가 어떤 타입의 값을 반환할지 정해야 한다.

    계산 결과가 숫자라면 NUMBER 타입으로 반환한다.

 

    (3) RETURN 값

    함수 내부에서 계산한 결과는 RETURN을 통해 밖으로 전달된다.

    SQL문에서는 이 반환값을 하나의 컬럼 값처럼 사용할 수 있다.

 

3) FUNCTION 사용

 

    (1) 보너스 계산

    사원번호를 전달하면 해당 사원의 급여와 보너스율을 조회한 뒤 보너스 금액을 계산할 수 있다.

    자주 사용하는 계산식을 함수로 만들어두면 SELECT문에서 간단히 호출할 수 있다.

 

    (2) 연봉 계산

    보너스 계산 함수를 활용하면 급여와 보너스를 포함한 연봉을 계산할 수 있다.

    복잡한 계산 로직을 함수 안에 숨기고 SQL문을 더 간단하게 만들 수 있다.


12 TRIGGER

1) TRIGGER의 개념

 

    (1) TRIGGER의 역할

    TRIGGER는 특정 이벤트가 발생했을 때 자동으로 실행되는 데이터베이스 객체이다.

    테이블에 INSERT, UPDATE, DELETE 같은 변화가 생기면 자동으로 정해진 작업을 수행할 수 있다.

 

    (2) TRIGGER를 사용하는 이유

    사용자가 직접 추가 작업을 하지 않아도, 데이터 변경에 맞춰 관련 작업을 자동 처리할 수 있다.

    예를 들어 입고 내역이 추가되면 제품 재고가 자동으로 증가하도록 만들 수 있다.

 

2) TRIGGER 실행 시점

 

    (1) BEFORE

    BEFORE 트리거는 데이터 변경 작업이 실제로 수행되기 전에 실행된다.

    값 검증이나 사전 처리에 사용할 수 있다.

 

    (2) AFTER

    AFTER 트리거는 데이터 변경 작업이 수행된 후 실행된다.

    변경 결과를 바탕으로 로그 기록이나 관련 테이블 수정에 사용할 수 있다.

 

3) FOR EACH ROW

 

    (1) FOR EACH ROW의 역할

    FOR EACH ROW는 변경되는 각 행마다 트리거를 실행하겠다는 의미이다.

    여러 행이 INSERT되면 각 행마다 트리거가 한 번씩 실행된다.

 

    (2) 사용 상황

    입출고 내역 한 건마다 제품 재고를 각각 증감해야 할 때 사용한다.

    행 단위로 세밀하게 처리해야 하는 작업에 필요하다.

 

4) :NEW

 

    (1) :NEW의 역할

    :NEW는 새로 INSERT되거나 UPDATE된 행의 값을 의미한다.

    트리거 안에서 새로 들어온 데이터의 컬럼 값을 참조할 때 사용한다.

 

    (2) 사용 상황

    PRODUCT_DETAIL에 새로 들어온 STATUS, AMOUNT, PCODE 값을 확인해서 PRODUCT 테이블의 STOCK을 수정할 수 있다.

    새 데이터 기준으로 후속 작업을 자동 처리할 때 사용한다.


13 재고 관리 트리거 예제

1) PRODUCT 테이블

 

    (1) PRODUCT의 역할

    PRODUCT 테이블은 제품의 기본 정보를 저장한다.

    제품코드, 제품명, 브랜드, 가격, 현재 재고 수량을 관리한다.

 

    (2) STOCK

    STOCK은 현재 제품의 재고 수량을 의미한다.

    기본값을 0으로 설정하면 제품 등록 시 초기 재고가 자동으로 0이 된다.

 

2) PRODUCT_DETAIL 테이블

 

    (1) PRODUCT_DETAIL의 역할

    PRODUCT_DETAIL 테이블은 제품의 입고와 출고 내역을 저장한다.

    어떤 제품이 언제 몇 개 입고되거나 출고되었는지 기록한다.

 

    (2) STATUS

    STATUS는 입고인지 출고인지 구분하는 컬럼이다.

    CHECK 제약조건을 사용해 입고 또는 출고만 저장되도록 제한한다.

 

    (3) FOREIGN KEY

    PRODUCT_DETAIL의 PCODE는 PRODUCT 테이블의 PCODE를 참조한다.

    존재하는 제품에 대해서만 입출고 내역을 저장할 수 있도록 관계를 설정한다.

 

3) SEQUENCE 활용

 

    (1) 제품 코드 자동 생성

    SEQ_PRODUCT를 사용하면 PRODUCT 테이블에 제품을 추가할 때 제품코드를 자동으로 생성할 수 있다.

    제품마다 고유한 번호를 직접 입력하지 않아도 된다.

 

    (2) 입출고 코드 자동 생성

    SEQ_DETAIL을 사용하면 PRODUCT_DETAIL 테이블에 입출고 내역을 추가할 때 내역 코드를 자동으로 생성할 수 있다.

    입출고 기록마다 고유한 번호를 부여할 수 있다.

 

4) 입고 트리거 처리

 

    (1) 입고 상태 확인

    PRODUCT_DETAIL에 새 데이터가 들어왔을 때 STATUS가 입고이면 재고를 증가시킨다.

    새로 들어온 AMOUNT만큼 PRODUCT의 STOCK을 더한다.

 

    (2) 자동 재고 증가

    입고 내역을 INSERT하면 PRODUCT 테이블의 재고가 자동으로 증가한다.

    사용자가 재고를 직접 수정하지 않아도 입고 기록만으로 재고가 관리된다.

 

5) 출고 트리거 처리

 

    (1) 출고 상태 확인

    PRODUCT_DETAIL에 새 데이터가 들어왔을 때 STATUS가 출고이면 재고를 감소시킨다.

    새로 들어온 AMOUNT만큼 PRODUCT의 STOCK을 뺀다.

 

    (2) 자동 재고 감소

    출고 내역을 INSERT하면 PRODUCT 테이블의 재고가 자동으로 감소한다.

    입출고 기록과 실제 재고 수량을 연결해서 관리할 수 있다.

 

6) 트리거 기반 재고 관리 흐름

 

    (1) 제품 등록

    PRODUCT 테이블에 제품명, 브랜드, 가격, 초기 재고를 저장한다.

 

    (2) 입출고 내역 추가

    PRODUCT_DETAIL 테이블에 입고 또는 출고 내역을 저장한다.

 

    (3) 트리거 자동 실행

    PRODUCT_DETAIL에 INSERT가 발생하면 TRIGGER가 자동으로 실행된다.

 

    (4) 재고 자동 변경

    STATUS가 입고이면 STOCK이 증가하고, 출고이면 STOCK이 감소한다.

    구조를 사용하면 입출고 기록을 기준으로 재고를 자동 관리할 있다.