관리 메뉴

개발 노트

8/19 정규화, KK 영업매출현황 TABLE 생성, KK_COLLECTION_PKG 제작(1) 본문

프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20/Oracle SQL

8/19 정규화, KK 영업매출현황 TABLE 생성, KK_COLLECTION_PKG 제작(1)

hayoung.dev 2022. 8. 19. 18:42

정규화 문제

 

문제 1.

문제 2.

제품번호 -> 제품명

제품번호 -> 재고 수량

주문번호 -> 수출여부

주문번호 -> 고객번호

주문번호 -> 사업자번호

고객번호 -> 사업자번호

고객번호 -> 우선순위

제품 번호 || 주문번호 -> 주문수량 (제품번호와 주문번호가 pk이므로 제품 번호, 주문번호 -> 주문수량 이 될 확률이 높다.)

 

 

문제3.

 

 

 

 

KK 영업매출현황 TABLE  생성

-> scott3 계정에서 

Create Table-Package 실습용 자료 생성.sql

코드 전부 붙여넣기

 

[이번부터 전부 scott3에서 실습]

--원래 INSERT문은 
INSERT INTO 테이블명(칼럼명) VALUES 넣을 값
--인데 서브쿼리를 사용하면 VALUES를 쓰지 않고
INSERT INTO 테이블명(칼럼명) SELECT문;
-- PACKAGE 선언부(Header) (Interface)
CREATE OR REPLACE PACKAGE KK_COLLECTION_PKG AS
    --행동강령
    -- 1. 당월기초 입고 수량을 생성한다.
    PROCEDURE KK_COLLECTION_PRC1(p_sum_yymm IN VARCHAR2);
    --2. 일자별 거래처 제품별 판매현황(SMCP10)정보를 생성 PGM    
    PROCEDURE KK_COLLECTION_PRC2(p_sum_yymm IN VARCHAR2);
    

END KK_COLLECTION_PKG;

CREATE OR REPLACE PACKAGE BODY KK_COLLECTION_PKG  AS
    /**************************************************************************************
    Procedure Name : KK_COLLECTION_PRC1
    Description    : 당월기초 입고 수량을 생성한다.
    *************************************************************************************/
    PROCEDURE KK_COLLECTION_PRC1(p_sum_yymm in VARCHAR2)
    IS
    
    BEGIN
        DBMS_OUTPUT.ENABLE;
        DBMS_OUTPUT.PUT_LINE('KK_COLLECTION_PRC1 p_sum_yymm=> ' || p_sum_yymm);
        -- 1) 당월 기초 입고 수량을 생성한다.
        -- 전 월 말(기말)의 재고를 이번 달 초(기초)의 재고로 가져온다.
        INSERT INTO mmsum30
            ( sum_yymm
            , item_code
            , item_gubn     --0이면 기초, 1이면 기말 재고를 뜻함. 
            , stck_qty
            , sawonID
            , RegiDate
            )
        ( SELECT p_sum_yymm
                        , item_code
                        , '0'   -- 기초
                        , stck_qty
                        , SawonID
                        , SYSDATE
            FROM mmsum30
            -- yyyymm(년월) string을 to_date로 하면  date형식으로 바뀐 후 일은 1일로 잡아준다. (*데이터 컨버팅)
            --그리고 ADD_MONTHS로 월에 1을 빼준다.
            --그리고 sum_yymm 형식이 varchar이기 때문에 다시 varchar 형식으로 바꾼다.
            -- *mmsum30테이블의 sum_yymm칼럼은 데이터는 날짜이지만 형식은 varchar이다. 
            -- 그 이유는 sum_yymm이 pk인데, 
            -- pk를 날짜형식으로 지정하게 되면 데이터에 시간데이터까지 들어가서 문제가 생길 수 있기 때문이다.
            WHERE sum_yymm = TO_CHAR(ADD_MONTHS ( TO_DATE(p_sum_yymm, 'YYYYMM'), -1), 'YYYYMM')
            AND item_gubn = '1' --기말
            );
    END KK_COLLECTION_PRC1;
    
END KK_COLLECTION_PKG;

 

실행 결과 : mmsum30 테이블에 데이터 추가됨

반응형