We obtain sometimes the next error from your partner's database:
<i>ORA-01438: value larger than specified precision allows for this column</i>
The entire response appears like the next:
<?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>
What could possibly be the cause of this error?
Thanks ahead of time.
The mistake appears to not be among a personality area, but much more of a number one. (Whether it were a string problem like WW pointed out, you'd obtain a 'value too big' or something like that similar.) Most likely you're using more numbers than are permitted, e.g. 1,000000001 inside a column understood to be number (10,2).
Consider the source code as WW pointed out to determine what column might be leading to the issue. Then look into the data if at all possible that's getting used there.
Further to previous solutions, you need to observe that a column understood to be VARCHARS(10) will store 10 bytes, not 10 figures unless of course you define it as being VARCHAR2(10 CHAR)
[The OP's question appears to become number related... case just in case other people includes a similar problem]
This signifies you are attempting to place something too large right into a column. For instance, you've got a VARCHAR2(10) column and you're simply investing in 11 figures. Same factor with number.
This really is happening at line 176 of package UMAIN. You should go and take a look at this to determine what it's as much as. Hopefully you are able to look up inside your source control (or from user_source). Later versions of Oracle report this error better, suggesting which column and what value.
Unsure why this really is tagge XML?
From http://ora-01438.ora-code.com/ (the definitive resource outdoors of Oracle Support):
ORA-01438: value bigger than specified precision permitted with this column
Cause: When placing or upgrading records, a number value was joined that exceeded the truth defined for that column.
Action: Enter something that complies using the number column's precision, or make use of the MODIFY option using the ALTER TABLE command to grow the truth.
ORA-06512: at stringline string
Cause: Backtrace message because the stack is unwound by unhandled exceptions.
Action: Repair the problem leading to the exception or write the best handler with this condition. Or you may want to speak to your application administrator or DBA.
The quantity you are attempting to store is simply too large for that area. Consider the SCALE and PRECISION. The main difference between your two is the amount of numbers in front of the decimal place that you could store.
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
Anything in the lower finish will get cut down (quietly)
select cast (5.33333333 as number(3,2)) from dual; CAST(5.33333333ASNUMBER(3,2)) ----------------------------- 5.33
One problem I have had, also it was horribly tricky, could be that the OCI call to explain a column characteristics reacts diffrently based on Oracle versions. Explaining an easy NUMBER column produced with no prec or scale returns differenlty on 9i, 1Og and 11g
It may be a sensible practice to define variables like below:
Nothing like below: