2012-06-01 1 views

답변

1

나는 마침내 그것을하는 방법을 발견했다. 유형 NUMBER의 값이 N 가정 해 봅시다, 당신은 어떻게 든 다음 부호있는 32 비트 정수 오버 플로우 시뮬레이션해야합니다

N := MOD(N, 4294967296); 
IF N > 2147483647 
THEN 
    N := N - 4294967296; 
ELSIF N < -2147483648 
THEN 
    N := N + 4294967296; 
END IF; 
2

아마 당신은 트랩 다음과 같이 오버 플로우 예외 수 :

DECLARE 
    n PLS_INTEGER; 
    addend PLS_INTEGER; 

    NUMERIC_OVERFLOW EXCEPTION; 
    PRAGMA EXCEPTION_INIT(NUMERIC_OVERFLOW, -1426); 
BEGIN 
    n := 2147483642; 
    addend := 6; 

    BEGIN 
    n := n + addend; 
    EXCEPTION 
    WHEN NUMERIC_OVERFLOW THEN 
     DBMS_OUTPUT.PUT_LINE('OVERFLOW!'); 
     n := -2147483647 + (-2147483647 + n + addend - 1); 

    WHEN OTHERS THEN 
     DBMS_OUTPUT.PUT_LINE('SQLCODE=' || SQLCODE || ' ' || SQLERRM); 
    END; 

    DBMS_OUTPUT.PUT_LINE(n); 
END; 

공유하고 즐길 수 있습니다.