2012-06-01 72 views

回答

1

我終於找到了一種方法來做到這一點。假設NNUMBER類型的值,並且您需要以某種方式模擬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; 

分享和享受。

相關問題