Oracle이 데이터베이스 테이블의 행에 NaN을 추가하는 시기/이유
NaN이 Not a Number의 약자인 것으로 알고 있습니다.하지만 Oracle이 언제, 왜 이 문제를 추가하는지 이해하기가 어렵습니다.
음수와 같이 0보다 작은 값을 만났을 때 또는 가비지 값일 때입니다.
문서에서:
Oracle Database 숫자 데이터 유형에는 정의되지 않은 작업의 결과인 양과 음의 고정 및 부동 소수점 숫자, 0, 무한대 및 값이 저장됩니다. "숫자가 아님" 또는
NAN
.
제가 알기로는 NaN을 binary_float 또는 binary_double 열에만 얻을 수 있습니다. 이 데이터 유형에는 NaN에 대한 자체 리터럴도 있고, 이들을 조작할 수 있는 조건도 있습니다.
이러한 값을 얻는 방법의 예는 0 플로트/더블 값을 0으로 나누는 것입니다.
select 0f/0 from dual;
0F/0
----
NaN
... 따라서 NaN이 표시되는 경우 애플리케이션 로직이나 기본 데이터가 손상될 수 있습니다. (참고로 '정상' 숫자 유형에서는 이를 얻을 수 없습니다.ORA-01476: divisor is equal to zero
분자가 부동하거나 두 배가 아닌 한).
0이나 음수는 NaN이 나오지 않습니다.문자열 열이 있고 응용 프로그램이 'NaN'이라는 단어를 입력하고 있을 수도 있지만 숫자를 문자열로 저장하는 것은 여러 수준에서 좋지 않은 생각이므로 그렇지 않기를 바랍니다.
아니요 <=0>은 여전히 숫자이므로 정확하지 않습니다.NaN(또는 무한대)은 계산할 수 없는 숫자(+- ∞ 또는 단순히 숫자가 아닌 것)를 다룰 때 DB가 제정신을 유지하기 위해 사용하는 특수한 값입니다.코드는 다음과 같습니다.
DECLARE
l_bd_test binary_double;
l_int_test INTEGER;
BEGIN
l_bd_test := 'NAN';
l_int_test := 0;
IF l_bd_test IS NAN THEN
DBMS_OUTPUT.PUT_LINE(l_bd_test || ' IS NAN');
ELSE
DBMS_OUTPUT.PUT_LINE(l_bd_test || ' IS A #');
END IF;
IF l_int_test IS NAN THEN
DBMS_OUTPUT.PUT_LINE(l_int_test || ' IS NAN');
ELSE
DBMS_OUTPUT.PUT_LINE(l_int_test || ' IS A #');
END IF;
END;
/
대체물NAN
위해서INFINITY
심지어 부정하고 결과를 볼 수도 있습니다.
언급URL : https://stackoverflow.com/questions/28461229/when-why-does-oracle-adds-nan-to-a-row-in-a-database-table
'source' 카테고리의 다른 글
Android 에뮬레이터에서 화면 방향을 변경하려면 어떻게 해야 합니까? (0) | 2023.10.19 |
---|---|
@ngrx/store로 상태 개체의 현재 값을 가져오는 방법은 무엇입니까? (0) | 2023.10.19 |
문자열에서 사용하는 문자 셀의 수 (0) | 2023.10.14 |
WooCommerce 가변상품 공지사항 이슈 - 상품 옵션을 선택해주세요 (0) | 2023.10.14 |
WooCommerce에서 모든 주문 상태의 민달팽이와 이름을 얻는 방법은? (0) | 2023.10.14 |