ORACLE NUMBER疑問,ORACLE中查詢條件為varchar2型別字段 number型別時異常

2022-05-30 13:40:03 字數 3044 閱讀 5211

1樓:匿名使用者

v_num2 number(3) :=3.1415926;--這個值為什麼等於3,只能存3位整數,小數部分會自動四捨五入

v_num3 number(3) :=3145.1415926;--報錯精度太高why,只能存3位整數,整數部份已經超過3位了

v_num5 number(4,3) :=314.123;--精度太高報錯,只能存1位整數,3位小數,整數部份超了

v_num6 number(8,3) :=31415.9267;--這個沒有問題和上面的區別,能存5位整數,3位小數,後面的小數會自動四捨五入

v_num7 number(4,-3) :=3145611.789;--這個等於多少為什麼,3146000,四捨五入到小數點前三位

v_num8 number(4,-3) :=314.567895;--這個等於多少為什麼,0,四捨五入到小數點前三位,314不足以進製,所以是0

v_num9 number(4,-1) :=31451;--這個等於多少為什麼,31450,四捨五入到小數點前一位

v_num9 number(4,-1) :=3145123;--這個等於多少為什麼,精度太高報錯,最多只能存4位整數,並且四捨五入到小數點前一位

2樓:匿名使用者

number(3)表示有三位數字,不包含小數,所以不能存入小數,

number(4,3)表示有4為,其中三位是小數,但這麼些顯然是不對的,因為小數點也算一位,所以應該是number(5,3),這樣可以存入0.000~9.999之間的數字,小數不能超過3位。

逗號前面的是包含小數點和小數在內的總數字個數,而後面的數字表示小數的位數。

這樣,你那些精度太高的問題應該能夠理解了吧。

至於後面有負號的我也沒用過,不清楚,你可以自己建個表試一下。

以上是oracle裡的,還有你那個(8,3)的,明顯超過了精度,真的沒問題???

剛才給你試了一下,number(5,-3)表示最大8為整數,但三位不顯示,就是百位以下的進行四捨五入。

而number(4,3)實際上只能有一位整數,輸入小數或者超過一位整數都會無法提交。

3樓:愛在庫爾勒

好好看看number這個函式吧,一看什麼都是到了,找權威的看,別人說的你也許會理解錯誤

oracle中查詢條件為varchar2型別字段=number型別時異常

4樓:清心之時

因為你寫是100 是個數字,oralce會自動 把 i 字段 轉化成數字進行比較,那麼,如果你 b庫的 i 欄位裡如果有不能轉化成數字的資料 就會報這個錯了。

5樓:匿名使用者

應該不會報錯這個。除非你原來i欄位中有字元,導致不能內部轉換。

6樓:

建議寫sql時候sql語句資料型別跟表中保持一致,這樣執行效率會高一些的。select * from t where i =『100 』,雖然有時oracle會自動轉換但會降低效率

7樓:匿名使用者

出現錯誤的原因是varchar2型別列中儲存了非number型字元。

解決方法是將number型別使用to_char進行轉換,如:

select * from 表名 where 列名 = to_char(number數值)

之所以出現這種錯誤,是由於oracle的隱式型別轉換造成的,也就是說,oracle在查詢時,會根據等式右邊的資料型別對左邊的進行型別轉換,所以為了避免此類錯誤及提高查詢效率,在寫語句的時候最好是保持資料型別一致。

8樓:匿名使用者

你是否是在2個庫中定義的i的型別不一樣?i為varchar的時候是可以判斷是否為100的 這個時候的100是乙個字元 不是數字。如果要使用數字來進行判斷的話 應該使用 to_num(i) = 100

9樓:匿名使用者

那是因為在 b表中存在字元導致的,你用如下語句就不會報錯

select * from t where i ='100'

10樓:bendan阿修

後面number用to_char轉換一下

oracle plsql sql%rowcount的幾點疑問

11樓:匿名使用者

1. v_count1 v_coun2 只是變數而已,後面的number(3)表示精度,該變數可以接收3位數以內的數字 超過則會報錯,一般情況下直接寫number更好一些,反而不容易出現錯誤。

2.sql%rowcount用於記錄修改的條數,就如你在sqlplus下執行delete from之後提示已刪除xx行一樣, 這個引數必須要在乙個修改語句和commit之間放置,否則你就得不到正確的修改行數。

例如:sql> declare n number;

2 begin

3 insert into test_a select level lv from dual connect by level<500;

4 n:=sql%rowcount;

5 commit;

6 dbms_output.put_line(n);

7 end;

8 /

499pl/sql procedure successfully completed.

sql> declare n number;

2 begin

3 insert into test_a select level lv from dual connect by level<500;

4 commit;

5 n:=sql%rowcount;

6 dbms_output.put_line(n);

7 end;

8 /

0pl/sql procedure successfully completed.

3.是最後乙個select的條數。 要統計所有的,可以使用三個變數接收sql%rowcount,然後相加即可,不過貌似直接select的寫法無法使用sql%rowcount。

3O3O3O34怎麼算,3O3O3O323O3O3O34,怎麼加,加減乘除四個符號?

3 3再加上3,然後再除以3,最後就等於4。3 3再加上乙個3,再除以乙個3,就等於4了 3 3 3 3 4 答案如下 3 3 3 3 4 3o3o3o3 4怎麼算 3 3 3 3 乘以 加 除以 3 3 3 3 4 3o3o3o3 2 3o3o3o3 4,怎麼加,加減乘除四個符號?3 3 3 3 ...

當兵體檢疑問,當兵體檢疑問

不會,我昨天體檢手上還被劃傷了,沒事 咬不就等於受傷嘛,難道以前被咬他們也能查出來不要了?所以放心吧 沒事 還有就是他們查的是頭部是否受傷過這樣 沒有的這個和體檢沒有關係的。徵兵為什麼要複檢 複檢有二種可能 1 體檢有疑問並不是每個體檢過的人都要複檢的,複檢可能是針對在體檢時有一些有疑問的人。需要再...

什麼是o2o模式,什麼是O2O模式

o2o就是online to offline,是指將線下的商務機會與網際網路結合,從而讓網際網路成為線下交易的前台,而我們經常看到的店鋪名字與o2o有關,就是因為這些 是將線下交易提到線上來。什麼是o2o模式?o2o就是online to offline,是指將線下的商務機會與網際網路結合,從而讓網...