2017-03-10 2 views
-4

프로 시저에서 두 개의 update 문을 작성했습니다. 몇 가지 이상한 이유에 대한 첫 번째 업데이트 성명은 레코드의 일부만 업데이트 (기본적으로 나는 100,000 개 이상의 행을 업데이 트). 그래서 두 번째 update 문은 항상 잘 작동합니다. 브레인 스토밍했지만 절차가 성공적으로 완료되었지만 문제가 무엇인지 알지 못합니다. 얼마나 많은 사람들이 업데이트를 받았는지와 얼마나 많은 것을 확인했는지와 같은 유효성 검사를 수행 할 수있는 방법이 있습니까? 기록 성공적으로 모든 시간 조건 불구을 업데이트업데이트 과정 중 일부가 프로 시저에서 작동하지 않습니다.

1 업데이트 문 (어떤 업데이트 때로는 일부 기록)

UPDATE /*+PARALLEL(A,10,2)*/ VV_ACT_CALL_DET_DIS_EXTRACT A SET PRIORITY = 
     (SELECT P.PRIORITY 
     FROM VV_ACT_CALL_DET_DIS P 
     WHERE P.CALL_ID = A.CALL_ID 
     AND P.PRODUCT_ID = A.PRODUCT_ID 
     AND P.IS_DELETED = A.IS_DELETED 
     AND ROWVAL = 1) 
WHERE EXTRACT_STATUS = 'PENDING' 
AND EXISTS 
     (SELECT B.PRIORITY 
     FROM VV_ACT_CALL_DET_DIS B 
     WHERE B.CALL_ID=A.CALL_ID 
     AND B.PRODUCT_ID = A.PRODUCT_ID 
     AND B.IS_DELETED = A.IS_DELETED); 

2 업데이트 문은

UPDATE /*+PARALLEL(A,10,2)*/ VV_ACT_CALL_DET_DIS_EXTRACT A SET TYPE = 
     (SELECT P.TYPE_VAL 
     FROM VV_ACT_CALL_DET_DIS P 
     WHERE P.CALL_ID = A.CALL_ID 
     AND P.PRODUCT_ID = A.PRODUCT_ID 
     AND P.IS_DELETED = A.IS_DELETED 
     AND ROWVAL = 1) 
WHERE EXTRACT_STATUS = 'PENDING' 
AND EXISTS 
     (SELECT B.TYPE_VAL 
     FROM VV_ACT_CALL_DET_DIS B 
     WHERE B.CALL_ID = A.CALL_ID 
     AND B.PRODUCT_ID = A.PRODUCT_ID 
     AND B.IS_DELETED = A.IS_DELETED); 
+0

'update ... (TYPE, PRIORITY) = (SELECT P.TYPE_VAL, P.PRIORITY ...)' – Mike

+0

그 동일한 Rene, 우선 우선 순위 필드를 업데이트하고 있습니다. 입력란 –

+0

@ 마이크 예, 시도 할 것입니다,하지만 유효성 검사에 대한 아이디어를 공유하는 경우 도움이 될 것입니다 –

답변

3

상기와 동일합니다 당신 업데이트 문 (커밋 전) 바로 뒤에 SQL % rowcount를 사용하여 업데이트 된 행 수를 쿼리 할 수 ​​있습니다. 예 :

update .... 
if sql%rowcount <> nnn then --or = 0 or ... 
    raise_application_error(-20001, 'invalid number of rows updated: ' || sql%rowcount); 
end if; 

'문제가 발생하지 않는 이유'와 관련하여 : 실제 데이터를 보지 않고도 알기 어렵습니다. 예제 데이터 세트를 제공 할 수 있습니까? 첫 번째 명령문이 동일한 수의 행을 업데이트하지만 데이터가 변경되지 않을 수도 있습니까 (우선 순위는 동일하게 유지됩니까)?

+0

분명히 오류 메시지는 '업데이트 할 곳을 찾지 못했습니다'라고 말하고 있습니다. 'sql % rowcount'의 값은 0 이외에 어떤 값을 기대합니까? –

+0

아마도 OP는 두 개의 update 문이 같은 수의 행에 영향을 주는지 테스트하려고합니다. 아마 0 만 흥미로울 것입니다. 이것은 단지 예일 뿐이었지만 더 명확하게 편집하고 있습니다. . – KFx