当前位置: 首页 > 面试题库 >

在Oracle中更改数字列的精度

谷奕
2023-03-14
问题内容

目前,我有一列被声明为NUMBER。我想将列的精度更改为NUMBER(14,2)。

所以,我跑了命令

 alter table EVAPP_FEES modify AMOUNT NUMBER(14,2)'

为此,我遇到了一个错误:

   column to be modified must be empty to decrease precision or scale

我猜想它在更改精度时希望该列为空,但我不知道为什么要在增加它的同时降低它,所以列中的数据不会丢失。有一个简短的解决方法吗?我不想将其复制到另一个表中,然后再删除它,或者重命名一列并在各列之间进行复制,因为存在传输和删除之间丢失数据的风险。


问题答案:

假设您最初没有设置精度,则假定为最大值(38)。您正在降低精度,因为您将精度从38更改为14。

解决此问题的最简单方法是重命名该列,将数据复制过来,然后删除原始列:

alter table EVAPP_FEES rename column AMOUNT to AMOUNT_OLD;

alter table EVAPP_FEES add AMOUNT NUMBER(14,2);

update EVAPP_FEES set AMOUNT = AMOUNT_OLD;

alter table EVAPP_FEES drop column AMOUNT_OLD;

如果您确实要保留列顺序,则可以将数据移动两次:

alter table EVAPP_FEES add AMOUNT_TEMP NUMBER(14,2);

update EVAPP_FEES set AMOUNT_TEMP = AMOUNT;

update EVAPP_FEES set AMOUNT = null;

alter table EVAPP_FEES modify AMOUNT NUMBER(14,2);

update EVAPP_FEES set AMOUNT = AMOUNT_TEMP;

alter table EVAPP_FEES drop column AMOUNT_TEMP;


 类似资料:
  • 问题内容: 我有一个包含以下各列的表: 产品ID定价日期当前价格最后定价日期 我正在尝试编写一个查询,以显示产品的旧价格(Last_Price),然后将其更改为当前价格,这样我的结果如下所示 有效地选择更改之前数据的价值。一些需要测试的资源-您可以使用脚本快速创建表: 对不起,每个人,我能补充一下其他并发症吗?我还需要在结果表中添加一列,以显示Last_Date_With_Prev_Price。因

  • 问题内容: 我正在尝试使用与表相同的命令来更改视图的列大小: 但是它的投掷错误 SQL错误:ORA-00942:表或视图不存在 那么如何改变视图的列大小呢? 问题答案: 这是我遵循的过程: 1-首先通过运行以下查询找到该视图的基表 2-上面的查询将为您提供一个表,您将在该表中找到列名“ REFERENCED_NAME”下的基表。 3-现在更改该基础表的列大小。 注意:该视图可以由1个或多个1个表组

  • 我是否可以在具有的数组中嵌入对象的数组的第二个元素? 结果:

  • 问题内容: 任何人都可以告诉我或提供对Oracle数字精度和Java类型之间映射的引用,即在什么时候number(x)映射到short,int,long BigInteger等。 问题答案: Java的整数类型与Oracle的类型不是完美匹配。本质上,有两种方法可以在世界之间进行映射,但都不完美: 现状: 严格小于-> 。 这样可以确保始终可以将SQL值读取为其Java类型。某些Java值可能无法

  • 我想在星形符号中显示所需的文本字段 如果用户未输入任何值,则应将边框颜色更改为红色 如果用户输入值,则应将边框颜色更改为绿色

  • 问题内容: 每次更新Oracle DB的特定表(任何类型的更新,包括记录的添加,删除和修改)时,我都需要在Java中运行一个方法。 对具有良好性能且不会对数据库造成太大压力的Java更改表进行“轮询”的最有效方法是什么? 不幸的是,我有很多限制: 我无法创建其他表,触发器,存储过程等,因为我无法控制数据库管理/设计。 我宁愿避免使用该职位中建议的Oracle Change Notification