ORA 01438處理方法

2021-12-29 21:47:14 字數 2657 閱讀 7162

ora-01438處理方法

解決思路:

(1)跟蹤執行插入的sql/儲存過程,找到罪魁禍首的行,修改後再次插入。

(2)最簡單的辦法就是增加目的欄位的精度。

由於定位不到具體的表以及具體的字段,需要跟蹤錯誤

1、首先進行建立表

sql> create table t (many number(4,2));

table created

精度為4,刻度為2 也就說整數字數最多為2,小數字數會占去2位

2、然後進行試驗插入

sql> insert into t values(1000000);

錯誤:ora-01438: value larger than specified precision allowed for this column

出現錯誤

3、進行系統設定改變進行trace

alter system set events='1438 trace name errorstack forever,level 10';

4、新開乙個會話(我覺得這樣的改變只對隨後的會話起作用,並不會對設定前的會話起作用)進行模擬錯誤。

sql> insert into tony.t values(100000000);

錯誤:ora-01438: value larger than specified precision allowed for this column

5、在後台系統

[oracle@localhost udump]$ pwd

/home/oracle/admin/orcl/udump

[oracle@localhost udump]$ ls

orcl_ora_5035.trc

還可以通過sql指令碼查詢生成的trace檔案:

select a.value || b.symbol || c.instance_name || '_ora_' || d.spid || '.trc'

trace_file

from (select value

from v$parameter

where name = 'user_dump_dest') a,

(select substr (value, -6, 1) symbol

from v$parameter

where name = 'user_dump_dest') b,

(select instance_name from v$instance) c,

(select spid

from v$session s, v$process p, v$mystat m

where s.paddr = p.addr and s.sid = m.sid and m.statistic# = 0) d

找到了trace檔案,當然我是先清空了所有以前的trace如果很多的話可以使用

ls  -lrt 進行排序找最近的trc檔案。

6、檢視trace檔案

[oracle@localhost udump]$ more orcl_ora_5035.trc

檔案很多內容,我所用到的只有前面幾行。

ora-01438: value larger than specified precision allowed for this column

current sql statement for this session:

insert into tony.t

values(100000000)

順利找到語句.

最後加一句如果想disable掉可以使用

sql> alter system set events='1438 trace name errorstack off';

system altered

附件:table 2-2 storage of scale and precision

actual data

specified as

stored as

123.89

number

123.89

123.89

number(3)

124123.89

number(6,2)

123.89

123.89

number(6,1)

123.9

123.89

number(3)

exceeds precision

123.89

number(4,2)

exceeds precision

123.89

number(6,-2)

100.01234

number(4,5)

.01234

.00012

number(4,5)

.00012

.000127

number(4,5)

.00013

.0000012

number(2,7)

.0000012

.00000123

number(2,7)

.0000012

1.2e-4

number(2,5)

0.00012

1.2e-5

number(2,5)

0.00001

ORA 01438處理方法

解決思路 1 跟蹤執行插入的sql 儲存過程,找到罪魁禍首的行,修改後再次插入。2 最簡單的辦法就是增加目的欄位的精度。ora 01438 value larger than specified precision allowed for this column 由於定位不到具體的表以及具體的字段,...

ORA 01438 值大於為此列指定的允許精度

number的資料宣告如下 表示 作用 說明 number p,s 宣告乙個定點數 p precision 為精度,s scale 表示小數點右邊的數字個數,精度最大值為38,number p 宣告乙個整數 相當於number p,0 number 宣告乙個浮點數 其精度為38,要注意的是scale...

ORA 01438 值大於為此列指定的允許精度

number的資料宣告如下 表示 作用 說明 number p,s 宣告乙個定點數 p precision 為精度,s scale 表示小數點右邊的數字個數,精度最大值為38,number p 宣告乙個整數 相當於number p,0 number 宣告乙個浮點數 其精度為38,要注意的是scale...