2013-06-26 62 views
1

我想要一個數字取值在-7.2E-75到+ 7.2E + 75之間。我應該如何爲NUMBER指定精度和縮放比例。 (刻度範圍是1到38,精度是-84到127)。Oracle Precision

如果還有其他方法可以做到這一點,請提出建議。

+0

只是問,你不能使用它們作爲varchar?如果你想計算,你可以使用to_number – Moudiz

+1

@Moudiz - 爲什麼地球上你會認爲將數字數據存儲爲字符串是一個好主意?如果沒有設計新的應用程序,必須在遺留系統中處理這些事情已經夠糟糕了。 – APC

+0

不知道爲什麼這次近距離投票「太寬泛」。似乎是一個非常集中的問題(甚至在我編輯它之前)。 – APC

回答

4

您建議的數字值在the limits of the Oracle NUMBER datatype之內。

您是否需要指定精度?定義列數只允許:

SQL> desc t1 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
COL1            NUMBER 
COL2            NUMBER 
COL3            NUMBER 
COL4            NUMBER 

SQL> insert into t1 (col1, col2) values (-7.2E-75, +7.2E+75); 

1 row created. 

SQL> 

如果是這些困擾你的域範圍,你需要定義一個CHECK約束強制執行的規則。


「假設我要COL1採取123456766675544.344546567676,用數字作爲數據類型及其失敗」

失敗?怎麼樣?該值工作正常,我(和以前相同的表):

SQL> insert into t1 (col1) values (123456766675544.344546567676); 

1 row created. 

SQL> 

所以,請提供更多的細節,如錯誤消息。

「當我啓動它只是和123456766675544上面的查詢,」這聽起來像是一個顯示問題

。正在插入正確的值。檢查了這一點:

SQL> set numwidth 50 
SQL> select col1 from t1 
/
    2 
               COL1 
-------------------------------------------------- 
7.20000000000000000000000000000000000000000000E+75 
         123456766675544.344546567676 

SQL> 

在這種情況下,設置NUMWIDTH其最大允許值(在SQL * Plus),讓我們來顯示一個值,但對方依然太大,所以我們必須用科學符號。

+0

假設我想讓COL1取123456766675544.344546567676,NUMBER作爲數據類型失敗。 –

+0

當我發出上述查詢時,它顯示的只是123456766675544,但我希望它在小數點後取值也應該是完整的123456766675544.344546567676。 –

+0

對不起,我說失敗了,這不是失敗,我沒有得到想要的結果,通過設置數據類型爲NUMBER。 –