Oracle PL/SQL에서 32 비트 정수 오버 플로우를 시뮬레이트하는 방법을 알고 계십니까? PL/SQL에서 부호있는 32 비트 정수 오버 플로우를 시뮬레이트하는 방법은 무엇입니까?
-2147483648 - 1 = 212147483647
예를 들어 ,
2147483647 + 1 = -2147483648
또는
나는 PLS_INTEGER을 시도하지만, 오버 플로우 예외가 발생합니다.Oracle PL/SQL에서 32 비트 정수 오버 플로우를 시뮬레이트하는 방법을 알고 계십니까? PL/SQL에서 부호있는 32 비트 정수 오버 플로우를 시뮬레이트하는 방법은 무엇입니까?
-2147483648 - 1 = 212147483647
예를 들어 ,
2147483647 + 1 = -2147483648
또는
나는 PLS_INTEGER을 시도하지만, 오버 플로우 예외가 발생합니다.나는 마침내 그것을하는 방법을 발견했다. 유형 NUMBER
의 값이 N
가정 해 봅시다, 당신은 어떻게 든 다음 부호있는 32 비트 정수 오버 플로우 시뮬레이션해야합니다
N := MOD(N, 4294967296);
IF N > 2147483647
THEN
N := N - 4294967296;
ELSIF N < -2147483648
THEN
N := N + 4294967296;
END IF;
을
아마 당신은 트랩 다음과 같이 오버 플로우 예외 수 :
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;
공유하고 즐길 수 있습니다.