首页 > 数据库 >Oracle在表中有数据的情况下修改字段类型或长度

Oracle在表中有数据的情况下修改字段类型或长度

时间:2022-10-10 17:58:50浏览次数:46  
标签:TABLE1 -- 表中 原字段 修改 TABLE Oracle 长度 ALTER

我们偶尔需要在已有表,并且有数据的情况下,修改其某个字段的类型或改变他的长度,但是因为表中有数据,所以不可以直接修改,需要换个思路。

-- Create table
create table TABLE1
(
  col1 number(9),
  col2 char(20)
);
-- 尝试修改
-- 修改成功,因为表中无数据
ALTER TABLE TABLE1 MODIFY COL1 NUMBER(10); 

-- 插入数据
INSERT INTO TABLE1 (COL1, COL2) VALUES (1, 'test');

-- 再次尝试修改
-- 修改失败,因为表中已有数据,不允许直接操作
ALTER TABLE TABLE1 MODIFY COL2 VARCHAR2(20);

-- 先缓存表
CREATE TABLE T_TABLE1 AS SELECT * FROM TABLE1;

-- 删除原表所有数据
DELETE FROM TABLE1;

-- 修改字段
-- 修改成功
ALTER TABLE TABLE1 MODIFY COL1 NUMBER(9);
-- 修改成功
ALTER TABLE TABLE1 MODIFY COL2 VARCHAR2(20);

-- 插入原数据
INSERT INTO TABLE1 SELECT * FROM T_TABLE1;

-- 删除缓存表
DROP TABLE T_TABLE1;

注意,如果是CHAR类型,不足位数会自动用空格补齐,所以谨慎使用CHAR类型,并可用TRIM()验证是否有符合条件的记录。

初始表结构时,SELECT * FROM TABLE1 WHERE COL2 = 'test'; 是没有数据的,需要SELECT * FROM TABLE1 WHERE TRIM(COL2) = 'test';

-- 增加一个新字段,用于缓存原字段信息
ALTER TABLE 表名 ADD 新字段 VARCHAR(2000);

-- 将原字段值复制到新字段上缓存
UPDATE 表名 SET 新字段 = 原字段;

-- 现将原字段值清空,以便于修改字段大小
UPDATE 表名 SET 原字段 = null;

-- 修改原字段
ALTER TABLE 表名 MODIFY 原字段 VARCHAR(2000);

-- 将新字段值复制到原字段
UPDATE 表名 SET 原字段 = 新字段;

-- 删除字段
ALTER TABLE 表名 DROP COLUMN 新字段;

标签:TABLE1,--,表中,原字段,修改,TABLE,Oracle,长度,ALTER
From: https://www.cnblogs.com/xiqingbo/p/oracle-03.html

相关文章

  • Flink自定义Oracle的Source的Demo
    1.实体类@Data@Builder//创建对象@NoArgsConstructor//无参构造函数@AllArgsConstructor//有参构造函数publicclassOrderSink{privateintid;......
  • Oracle pfile与spfile文件参数(转载)
    一、pfile与spfileOracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件。它们是在数据库实例启动时候加载的,决定了数据库的物理结构、内存、数据库......
  • 1、Centos7下安装Oracle11gR2及多实例
    实验环境:系统:2核8G内存60G硬盘,centos7.4;优化操作:已经关闭了防火墙、selinux,/etc/hosts文件中以添加"172.16.1.92slave-node2"的主机解析记录;设置u......
  • 28、python3.7(windows)将ORACLE11gR2中的数据取出写入excel表
    28.1、下载python的离线扩展模块:1、windows下python的离线扩展模块下载地址为:​​https://www.lfd.uci.edu/~gohlke/pythonlibs/​​提示:可以通过python官方的pypi仓库下载l......
  • 再学·Oracle-数据库-04
    PLSQL编程:procedure Language 过程语言   PLSQL编程是Oracle对sql的一个扩展,让我们可以像在java 中 写 if else  else if,还可以写相应的循环逻辑。  语......
  • Oracle 数据库升级过程中的主要步骤
    Oracle数据库升级包括六个主要步骤。Oracle数据库的升级步骤工作流   步骤1:准备升级Oracle数据库熟悉Oracle数据库新版本的特性。确定新版本的升级路......
  • Oracle转Poatgresql,ora2pg工具安装使用
    一、ora2pg:ora2pg工具可以将oracle的结构转为postgresql格式,可以配置Oracle的模式导出、客户端编码、导出类型、ora2pg中使用的数据类型转换等,最终输出为sql文件,在postgre......
  • jmeter截取指定长度的UUID
    1、使用BeanShellSampler,写如下代码:importjava.util.UUID;UUIDuuid1=UUID.randomUUID();//获取UUID的值//把uuid中的‘-’去掉,从左开始取32位字符,然后传给变量id......
  • oracle内存管理
    关于内存管理必须管理的内存结构是系统全局区(SGA)和实例程序全局区(instancePGA)。Oracle数据库支持各种内存管理方法,这些方法由初始化参数设置选择。 自动内存管理Or......
  • 分享一个查看分析Oracle表空间使用情况的脚本
    个人一直使用下面这个脚本查看、分析Oracle数据库表空间的使用情况,这个脚本经过我不断的调整、完善,已经接近完美了。已经很长时间没有改动过了,个人累积的脚本名为get_table......