oracle sql精度,缩放,插入计算和删除

时间:2010-09-17 12:24:21

标签: sql oracle

table = mytable
temp col = tempcol
col = mycol

目前包含5000行各种值,从99999.99999到0.00001

我需要保持数据创建脚本以创建临时列,将值舍入为7,3将mycol更新为空值,将我的列从10,5修改为7,3将数据返回到mycol,drop临时专栏。完成工作。

到目前为止

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

请您填写缺失的空白是否可以直接解决问题。

1 个答案:

答案 0 :(得分: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