oracle - 在 oracle 中缩小一列

标签 oracle ddl alter-table

假设我有一个具有以下定义的表

create table dummy (col1 number(9) not null)

这个 dummy.col1 中的所有值都是 7 位长。现在我想使用 alter 命令将此列的长度从 9 减少到 7。 Oracle 给我的错误是 要修改的列必须为空以降低精度或小数位数 .说得通。

我想问一下有没有办法减少列大小?
  • 我无法删除列中的值。
  • 我无法将此列中的值复制到另一列,因为它有数万亿的数据。
  • 最佳答案

    列大小与数据的物理存储方式无关(它们是可变长度的)

    例如如果存储在数字(38)中,数字(2)中的“23”将占用完全相同的空间

    它纯粹是对可以存储在列中的最大数量的约束,因此您可以在列上添加约束:

    ALTER TABLE dummy ADD 
    CONSTRAINT c1
    CHECK (col1 < 9999999)
    ENABLE
    VALIDATE;
    

    如果你想让它走得更快一点改变 VALIDATENOVALIDATE显然这不会检查现有数据的有效性。

    关于oracle - 在 oracle 中缩小一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7741468/

    相关文章:

    php - MySQL - PhpMyadmin - 创建多个表

    MYSQL修改表current_time默认错误

    postgresql - 将空列添加到 postgres 表会导致锁定吗?

    Mysql更改列明细

    c++ - 有没有办法创建一个匹配表的 %rowtype 的对象类型?

    java - 在 ojdbc 12.1 中使用 TNS 别名

    sql - 连接包含历史数据的多个表

    sql - 在 Oracle 中按组旋转没有聚合函数或行到列

    mysql - 使用 MYSQL 中另一个现有表的值定义表模式的 SQL 脚本

    mysql - 将 mysql 数据库转换为 Oracle