2010-09-17 86 views
0
table = mytable 
temp col = tempcol 
col = mycol 

目前包含5000行不同的值從99999.99999至0.00001的Oracle SQL精度,規模,插入計算和下降

我需要保持數據創建一個腳本來創建一個臨時列,一輪值7 ,3將mycol更新爲空值,將我的列從10,5修改爲7,3,將數據返回給mycol,放下臨時列。任務完成。

到目前爲止

SELECT mycol 
INTO tempcol 
FROM mytable 

update mytable set mycol = null 

alter table mytable modify mycol number (7,3) 

SELECT tempcol 
INTO mycol 
FROM mytable 

drop tempcol 

能否請您填寫丟失的差距是直接我一個解決方案。

回答

4

那麼首先NUMBER(10,5)可以存儲從-99999到99999的結果,而NUMBER(7,3)間隔僅爲[-9999,9999],因此您可能會遇到轉換錯誤。您可能需要將該列更改爲NUMBER(8,3)

現在你的計劃似乎聲音:你不能降低精度或列的規模上,但該列的數據,所以你將數據存儲到一個臨時列。我會做這樣的:

SQL> CREATE TABLE mytable (mycol NUMBER(10,5));  
Table created 

SQL> /* populate table */ 
    2 INSERT INTO mytable 
    3  (SELECT dbms_random.value(0, 1e10)/1e5 
    4  FROM dual CONNECT BY LEVEL <= 1e3);  
1000 rows inserted 

SQL> /* new temp column */ 
    2 ALTER TABLE mytable ADD (tempcol NUMBER(8,3));  
Table altered 

SQL> /* copy data to temp */ 
    2 UPDATE mytable 
    3  SET tempcol = mycol, 
    4   mycol = NULL;  
1000 rows updated 

SQL> ALTER TABLE mytable MODIFY (mycol NUMBER(8,3));  
Table altered 

SQL> UPDATE mytable 
    2  SET mycol = tempcol;  
1000 rows updated 

SQL> /* cleaning */ 
    2 ALTER TABLE mytable DROP COLUMN tempcol; 
Table altered 
+0

這看起來不錯,但發生的電流值或將自動發生在哪裏呢舍入,以澄清我是從5位小數會四捨五入的數量,然後將更新值將小數點後3位。 – icecurtain 2010-09-17 13:25:37

+0

@icecurtain:舍入將自動完成 – 2010-09-17 13:33:31