ORA-01438: 지정된 정밀도보다 큰 값이 이 열에 허용됩니다.
파트너 데이터베이스에서 다음과 같은 오류가 발생할 수 있습니다.
<i>ORA-01438: value larger than specified precision allows for this column</i>
전체 응답은 다음과 같습니다.
<?xml version="1.0" encoding="windows-1251"?>
<response>
<status_code></status_code>
<error_text>ORA-01438: value larger than specified precision allows for this column ORA-06512: at "UMAIN.PAY_NET_V1_PKG", line 176 ORA-06512: at line 1</error_text>
<pay_id>5592988</pay_id>
<time_stamp></time_stamp>
</response>
이 오류의 원인은 무엇입니까?
저장하려는 번호가 필드에 비해 너무 큽니다.Scale과 Precision을 확인합니다.둘 사이의 차이는 저장할 수 있는 소수 자리 앞의 자릿수입니다.
select cast (10 as number(1,2)) from dual
*
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column
select cast (15.33 as number(3,2)) from dual
*
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column
하단의 모든 항목이 자동으로 잘립니다.
select cast (5.33333333 as number(3,2)) from dual;
CAST(5.33333333ASNUMBER(3,2))
-----------------------------
5.33
오류는 문자 필드 중 하나가 아니라 숫자 필드에 더 가까운 것 같습니다. (WW에서 언급한 것과 같은 문자열 문제라면 '값이 너무 큽니다' 또는 이와 유사한 문제가 발생할 수 있습니다.)숫자(10,2)로 정의된 열의 1,0000001과 같이 허용된 숫자보다 더 많은 숫자를 사용하고 있을 수 있습니다.
WW가 언급한 소스 코드를 보고 문제의 원인이 될 수 있는 열을 확인합니다.그런 다음, 가능하면 그곳에서 사용되는 데이터를 확인합니다.
이전 답변과 함께 VARCHARS(10)로 정의된 열은 VARCHAR2(10CHAR)로 정의되지 않는 한 10자가 아닌 10바이트를 저장합니다.
[OP의 질문은 숫자와 관련된 것 같습니다...이것은 다른 누군가가 비슷한 문제를 가지고 있는 경우를 대비한 것입니다].
이것은 너무 큰 것을 열에 넣으려고 한다는 것을 나타냅니다.예를 들어 VARCHAR2(10) 열이 있고 11자를 입력한다고 가정합니다.숫자도 마찬가지입니다.
UMAIN 패키지의 176 라인에서 발생하고 있습니다.당신은 가서 그것이 무엇을 하는지 볼 필요가 있을 것입니다.소스 제어(또는 user_source)에서 검색할 수 있기를 바랍니다.이후 버전의 Oracle에서는 이 오류를 더 잘 보고하여 어떤 열과 어떤 값을 사용하는지 알 수 있습니다.
참고: 숫자 필드 크기 위반은 ORA-01438을 제공합니다: 이 열의 지정된 정밀도보다 큰 값을 허용합니다.
VARCHAR2 필드 길이를 위반하면 ORA-12899: 값이 열에 대해 너무 큽니다...
Oracle은 오류 코드와 메시지를 기반으로 열의 데이터 유형을 구분합니다.
제가 겪었던 한 가지 문제는 열 속성을 설명하는 OCI 호출이 Oracle 버전에 따라 다르게 작동한다는 것이었습니다.사전 축척 없이 생성된 단순 NUMBER 열을 설명하면 9i, 1Og 및 11g에서 차이가 반환됩니다.
http://ora-01438.ora-code.com/ 에서 제공(Oracle Support 외부의 최종 리소스):
ORA-01438: 이 열의 지정된 정밀도보다 큰 값
원인: 레코드를 삽입하거나 업데이트할 때 열에 대해 정의된 정밀도를 초과하는 숫자 값이 입력되었습니다.
조치: 숫자 열의 정밀도를 준수하는 값을 입력하거나 ALTER TABLE 명령과 함께 MODIFY 옵션을 사용하여 정밀도를 확장합니다.
http://ora-06512.ora-code.com/ :
ORA-06512: 문자열 행에서
원인: 처리되지 않은 예외에 의해 스택이 해제될 때 메시지를 역추적합니다.
조치: 예외를 발생시키는 문제를 해결하거나 이 조건에 대한 예외 처리기를 작성합니다.또는 애플리케이션 관리자 또는 DBA에게 문의해야 할 수도 있습니다.
다음과 같은 변수를 정의하는 것이 좋습니다.
v_departmentid departments.department_id%TYPE;
아래와 같지 않음:
v_departmentid NUMBER(4)
PHP와 바인딩된 정수 변수(SQLT_INT를 사용하는 oci_bind_by_name)를 사용하는 경우에도 이 오류 코드를 얻을 수 있습니다.바인딩된 변수를 통해 NULL을 삽입하려고 하면 이 오류가 발생하거나 값 2가 삽입되는 경우가 있습니다(더 나쁜 경우).
이 문제를 해결하려면 변수를 고정 길이의 문자열(SQLT_CHR)로 바인딩해야 합니다.NULL을 삽입하려면 먼저 빈 문자열(Oracle에서 NULL과 동일)로 변환하고 다른 모든 정수 값을 해당 문자열 표현으로 변환해야 합니다.
언급URL : https://stackoverflow.com/questions/181344/ora-01438-value-larger-than-specified-precision-allows-for-this-column
'IT' 카테고리의 다른 글
gcc로 어셈블리에 컴파일하려면 어떻게 해야 합니까? (0) | 2023.07.12 |
---|---|
"한 페이지에 모든 열 맞춤" 설정에 대한 파일을 설정하는 방법 (0) | 2023.07.12 |
"stale" git branch는 무엇입니까? (0) | 2023.07.12 |
iOS 시뮬레이터 카메라에 액세스하는 방법 (0) | 2023.07.12 |
파일 또는 어셈블리 '시스템'을 로드할 수 없습니다.MVC4 웹 API의 Net.Http 버전= 2.0.0 (0) | 2023.07.12 |