티스토리 뷰

카테고리 없음

ㅁㅁ

SBP 2025. 11. 27. 11:09

PROCEDURE SP_REJECT_WITH_HISTORY (
    p_id IN NUMBER,
    p_worker_id IN VARCHAR2
) IS
    v_error_msg VARCHAR2(4000);
    v_data      MAIN_TABLE%ROWTYPE;
BEGIN
    -- 1. 현재 데이터 로드
    SELECT * INTO v_data FROM MAIN_TABLE WHERE ID = p_id;

    -- 2. 20여 가지 항목 검증 (메시지 누적)
    -- [예시 1: NULL 체크]
    IF v_data.TITLE IS NULL THEN
        v_error_msg := v_error_msg || '[제목 누락] ';
    END IF;

    -- [예시 2: 복합 조건 체크]
    -- 컬럼값이 1인데 다른 테이블에 데이터가 있는 경우
    DECLARE
        v_cnt NUMBER;
    BEGIN
        IF v_data.TYPE_CD = '1' THEN
            SELECT COUNT(*) INTO v_cnt FROM SUB_TABLE WHERE REF_ID = p_id;
            IF v_cnt > 0 THEN
                v_error_msg := v_error_msg || '[타입1 데이터 중복] ';
            END IF;
        END IF;
    END;

    -- 3. 검증 결과에 따른 처리
    IF v_error_msg IS NOT NULL THEN
        -- A. 메인 테이블 상태 업데이트
        UPDATE MAIN_TABLE
           SET STATUS = 'REJECTED',
               UPD_DT = SYSDATE
         WHERE ID = p_id;

        -- B. 이력 테이블에 INSERT (반려 사유 포함)
        INSERT INTO STEP_HISTORY (
            HIST_SEQ,
            TARGET_ID,
            STATUS,
            REMARK,      -- 여기에 'REJECT_REASON' 명칭 사용 권장
            WORKER_ID,
            WORK_DT
        ) VALUES (
            SEQ_HIST.NEXTVAL,
            p_id,
            'REJECTED',
            TRIM(v_error_msg),
            p_worker_id,
            SYSDATE
        );
    END IF;

    COMMIT;
END;

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
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
글 보관함