누군가이 함수에 COMMIT이 EXCEPTION을 반환하는 이유를 설명해 줄 수 있습니까?PostgreSQL에서 커밋, 세이브 포인트, 롤백?
DECLARE
XNar CURSOR (forDATE Varchar) IS
SELECT NARUCENO, ISPORUKA_ID FROM XDATA_NARUDZBE
WHERE TO_CHAR(XDATA_NARUDZBE.DATUM, 'DD.MM.YYYY') = forDATE;
LastDate DATE;
OutResult INTEGER;
curNAR NUMERIC;
curISP VARCHAR;
RXNar RECORD;
BEGIN
OutResult := 1;
SELECT MAX(DATUM) INTO LastDate FROM XDATA_NARUDZBE;
FOR RXNar IN XNar(TO_CHAR(LastDate, 'DD.MM.YYYY')) LOOP
IF (RXNar.NARUCENO <> 0) AND (RXNar.ISPORUKA_ID = 'R01') THEN
UPDATE NARUDZBE SET ISPORUCENO = RXNar.NARUCENO
WHERE NARUDZBE.PP_ID = RXNar.PP_ID
AND NARUDZBE.ART_ID = RXNar.ART_ID
AND NARUDZBE.ISPORUKA_ID = 'R01';
END IF;
END LOOP;
COMMIT; <--- ????
RETURN OutResult;
EXCEPTION
WHEN OTHERS THEN
OUTRESULT := 0;
RAISE;
RETURN OutResult;
END;
나는 예외 블록 기능에있는 경우 세이브 포인트 롤백을 사용할 수없는 이유는 무엇입니까?
링크 : [페이지]의 마지막 단락 (http://www.postgresql.org/docs/current/static/plpgsql-structure.html#PLPGSQL-STRUCTURE) –
@JackPDouglas을 : 즉 OP 필요가 중첩 무엇 블록. –
다른 말로하면 그는 절차 밖에서'커밋 '해야합니까? 내 이해는 그가 프로 시저 내에서 하위 트랜잭션을 롤백 할 수 있지만 전혀 커밋하지는 않습니다 (또는 전체 트랜잭션을 명시 적으로 '롤백'함). –