좀전 질문내용이 약간 잘못되어 있어 좀더 자세하게 올려보겠습니다. 글로 물어보려니 참 힘드네요 ㅜㅜ
내용을 요약하면 MASTER, DETAIL 두개의 테이블이 있고 MASTER에는 DETAIL에 있는 합계데이타가 들어갑니다. 즉, DETAIL에 ID, STR_CD, SLIP_NO가 같은 데이타의 합계가 MASTER에 들어가 있습니다.
MASTER와 DETAIL은 ID, STR_CD, SLIP_NO로 조인이 되구요
보통 INSERT문 사용시에는
INSERT INTO TABLE_MASTER (ID, STR_CD, SLIP_NO, TOT_QTY, TOT_AMT, REG_DATE)
SELECT ID, STR_CD, SLIP_NO, SUM(TOT_QTY), SUM(TOT_AMT), SYSDATE AS REG_DATE
FROM TABLE_DETAIL
WHERE SLIP_NO = :SLIP_NO
AND STR_CD = :STR_CD
AND ID = :ID
GROUP BY ID, STR_CD, SLIP_NO, REG_DATE
이런식으로 처리하는데 이걸 프로시저의 MERGE문 내에서 사용하려고 합니다.
vID, vSLIP_NO, vSTR_CD는 프로시저 인수로 받은변수고요
BEGIN
MERGE INTO TABLE_MASTER M
USING (SELECT ID, STR_CD, SLIP_NO
FROM TABLE_MASTER
WHERE SLIP_NO = vSLIP_NO AND STR_CD = vSTR_CD AND ID = vID) S
ON ( M.ID = S.ID AND
M.STR_CD = S.STR_CD AND
M.SLIP_NO = S.SLIP_NO )
WHEN MATCHED THEN
UPDATE SET
TOT_QTY = (SELECT SUM(TOT_QTY)
FROM TABLE_DETAIL
WHERE SLIP_NO = vSLIP_NO AND STR_CD = vSTR_CD AND ID = vID),
TOT_AMT = (SELECT SUM(TOT_AMT)
FROM TABLE_DETAIL
WHERE SLIP_NO = vSLIP_NO AND STR_CD = vSTR_CD AND ID = vID),
MOD_DATE = SYSDATE
WHEN NOT MATCHED THEN
INSERT (ID, STR_CD, SLIP_NO, TOT_QTY, TOT_AMT, REG_DATE)
-> (SELECT ID, STR_CD, SLIP_NO, SUM(TOT_QTY), SUM(TOT_AMT), SYSDATE AS REG_DATE
-> FROM TABLE_DETAIL
-> WHERE SLIP_NO = vSLIP_NO
-> AND STR_CD = vSTR_CD
-> AND ID = vID
-> GROUP BY ID, STR_CD, SLIP_NO, REG_DATE);
END;
에러가 나는 부분은 NOT MATCHED THEN문장에서 VALUES가 없다고 에러가 나구요
VALUES를 넣으면 ORA-00936 누락된 표현식 에러가 발생합니다.
-> 부분을 어떻게 해야 될까요