CREATE OR REPLACE PROCEDURE PRO_재고이월_품번
(YYYYMM IN CHAR
,변_품번 IN VARCHAR2
,변_사이즈 IN VARCHAR2
,변_색상 IN VARCHAR2
,변_매장코드 IN VARCHAR2
,변_매장존 IN VARCHAR2
)
IS
BEFORE_INV NUMBER (12,2) := NULL;
AFTER_INV NUMBER (12,2) := NULL;
사용자정의에러 EXCEPTION;
BEGIN
BEGIN
MERGE INTO (SELECT *
FROM 영업매장월계
WHERE 발생일자 = TO_CHAR(ADD_MONTHS(TO_DATE(YYYYMM||'01'), 1),'YYYYMM')
AND 품번 = 변_품번
AND 사이즈 = 변_사이즈
AND 색상 = 변_색상
AND 매장코드 = 변_매장코드
AND 매장존 = 변_매장존
) 월계
USING (SELECT *
FROM 영업매장월계
WHERE 발생일자 = YYYYMM
AND 품번 = 변_품번
AND 사이즈 = 변_사이즈
AND 색상 = 변_색상
AND 매장코드 = 변_매장코드
AND 매장존 = 변_매장존
) MON
ON ( 월계.품번 = MON.품번
AND 월계.사이즈 = MON.사이즈
AND 월계.색상 = MON.색상
AND 월계.매장코드 = MON.매장코드
AND 월계.매장존 = MON.매장존)
WHEN MATCHED THEN
UPDATE
SET 월계.기초재고미착 = MON.기말재고미착,
월계.기말재고미착 = MON.기말재고미착 + 월계.미착입점량
+ 월계.미착반품량
+ 월계.미착이동반입량
WHEN NOT MATCHED THEN
INSERT(발생일자, 매장코드, 매장존, 품번, 색상, 사이즈,
기초재고, 기초재고미착, 기말재고, 기말재고미착, 기초재고금액, 기말재고금액)
VALUES(TO_CHAR(ADD_MONTHS(TO_DATE(YYYYMM||'01'), 1),'YYYYMM')
, MON.매장코드, MON.매장존, MON.품번, MON.색상, MON.사이즈,
MON.기말재고, MON.기말재고미착, MON.기말재고, MON.기말재고미착, MON.기말재고금액, MON.기말재고금액);
END;
위의 프로시저는 문제 없이 돌아갑니다.......
CREATE OR REPLACE PROCEDURE PRO_재고이월_품번
(YYYYMM IN CHAR
,변_품번 IN VARCHAR2
,변_사이즈 IN VARCHAR2
,변_색상 IN VARCHAR2
,변_매장코드 IN VARCHAR2
,변_매장존 IN VARCHAR2
)
IS
NEXT_YYYYMM CHAR (6) := NULL;
BEFORE_INV NUMBER (12,2) := NULL;
AFTER_INV NUMBER (12,2) := NULL;
사용자정의에러 EXCEPTION;
BEGIN
BEGIN
SELECT
TO_CHAR(ADD_MONTHS(TO_DATE(YYYYMM||'01'), 1),'YYYYMM')
INTO NEXT_YYYYMM
FROM DUAL;
MERGE INTO (SELECT *
FROM 영업매장월계
WHERE 발생일자 = NEXT_YYYYMM
AND 품번 = 변_품번
AND 사이즈 = 변_사이즈
AND 색상 = 변_색상
AND 매장코드 = 변_매장코드
AND 매장존 = 변_매장존
) 월계
USING (SELECT *
FROM 영업매장월계
WHERE 발생일자 = YYYYMM
AND 품번 = 변_품번
AND 사이즈 = 변_사이즈
AND 색상 = 변_색상
AND 매장코드 = 변_매장코드
AND 매장존 = 변_매장존
) MON
ON ( 월계.품번 = MON.품번
AND 월계.사이즈 = MON.사이즈
AND 월계.색상 = MON.색상
AND 월계.매장코드 = MON.매장코드
AND 월계.매장존 = MON.매장존)
WHEN MATCHED THEN
UPDATE
SET 월계.기초재고미착 = MON.기말재고미착,
월계.기말재고미착 = MON.기말재고미착 + 월계.미착입점량
+ 월계.미착반품량
+ 월계.미착이동반입량
WHEN NOT MATCHED THEN
INSERT(발생일자, 매장코드, 매장존, 품번, 색상, 사이즈,
기초재고, 기초재고미착, 기말재고, 기말재고미착, 기초재고금액, 기말재고금액)
VALUES(NEXT_YYYYMM
, MON.매장코드, MON.매장존, MON.품번, MON.색상, MON.사이즈,
MON.기말재고, MON.기말재고미착, MON.기말재고, MON.기말재고미착, MON.기말재고금액, MON.기말재고금액);
END;
이 프로시저는 ORA-00600 : INTERNAL ERROR CODE, ARGUMENTS:[qcsfbdnp:1],[],[],.. 오류를 뱉습니다..
이유가 뭘까요??
제가 아무리 봐도 NEXT_YYYYMM을 변수로 받아오기, MERGE문에서 NEXT_YYYYMM 구하기..
이 차이 뿐이 없는거 같거든요;; 제가.. 바보인가요;;