마감SP를 수정중인데요..
커서로 돌면서 Update하던 내용을
Temp테이블을 사용해서 중간 입력하고 ,
그 내용을 가지고 한번에 Update하는 방법으로 바꿨습니다.
Update할때는 /*+ bypass_ujvc */ 를 사용했구요.
그런데 제가 수동으로 SQL문을 실행해서
Temp테이블에 입력하고, 업데이트를 실행하면
1초미만으로 시간이 걸리는데
SP안에서 구동되면
2분이 걸리네요.
쿼리가 달라지는것도 아닌데 왜이러나싶어서요..
어디가 문제인지 감이 안잡혀 조언을 구합니다.
어디가 대충문제인지 알면
소스라도 올려서 참고하시라고 보여드리는데
일단은 Update구문을 적어봅니다.
UPDATE /*+ bypass_ujvc */
(
SELECT A.UNIT_PRICE,
A.AMT1,
A.IO_TYPE,
A.IN_QTY,
A.OUT_QTY,
A.TA_QTY,
A.updt_date,
B.UNIT_PRICE AS REC_UNIT_PRICE
FROM AT_MMAT_LEDGER A,
AT_MMAT_LEDGER_TEMP B
WHERE A.CLOSE_YYMM = V_CLOSE_YYMM
AND A.IO_TYPE <>'204'
AND A.UNIT_PRICE=0
AND A.CORP_ID = TRIM(B.CORP_ID(+))
AND A.WORK_YMD = B.WORK_YMD(+)
AND A.WORK_NO = B.WORK_NO(+)
AND A.WORK_LINE = B.WORK_LINE(+)
AND A.PREQ_YYMM = B.PREQ_YYMM(+)
AND A.PREQ_NO = B.PREQ_NO(+)
AND A.PREQ_SEQ = B.PREQ_SEQ(+)
)X
SET unit_price = REC_UNIT_PRICE,
amt1 = DECODE(substr(io_type,1,1),'1',in_qty *
X.rec_unit_price,
'2',(out_qty + ta_qty) * X.rec_unit_price),
updt_date = sysdate
WHERE REC_UNIT_PRICE IS NOT NULL;
값을 직접입력할때랑 변수로 넣었을때랑
변수값으로 인해 실행계획이 많이 바뀌네요..
원인은 저거였다는거~