`

oracle中修改有数据的表的字段类型

阅读更多
【修改时会涉及到数据类型转换,小心】
在修改列的长度时候,只能编辑比现有字段实际存的长度还要大,否则提示下面的错误:
  ORA-01441: 无法减小列长度, 因为一些值过大
此处对oracle中数据类型转换做一个小结:
oracle数据类型转换规律:
(1)比较时,一般是字符型转换为数值型,字符型转换为日期型
(2)算术运算时,一般把字符型转换为数值型,字符型转换为日期型
(3)连接时(||),一般是把数值型转换为字符型,日期型转换为字符型
(4)赋值、调用函数时,以定义的变量类型为准。


第一种方式【本人推荐,生产中比较实用】(使用辅助字段)
{实验环境准备}
create table t_person(
id varchar2(200) primary key,
name varchar2(200),
address varchar2(200)
);

desc t_person;
SQL> desc t_person
Name Type     Nullable Default Comments
-------   ------------- -------- ------- --------
ID       VARCHAR2(200)                          
NAME     VARCHAR2(200)   Y                       
ADDRESS  VARCHAR2(200)   Y 

insert into t_person(id,name,address) values(sys_guid(),'zhangsan','beijing');
insert into t_person(id,name,address) values(sys_guid(),'lisi','shangqiu');

想把address的varchar2类型改为clob类型

(1)

alter table t_person rename column address to myaddress;

把原字段换个名字,address改为myaddress

(2)

alter table t_person add address clob;

在表中添加一个原字段名字 address 并把类型定义为自己想改变的类型,这里是clob

(3)

update t_person set address = myaddress;

把备份的myaddress字段内容添加到新建字段address中来

(4)
alter table t_person drop column myaddress;

把备份字段myaddress删除

SQL> desc t_person
Name Type     Nullable Default Comments
------- ------------- -------- ------- --------
ID        VARCHAR2(200)                          
NAME      VARCHAR2(200) Y                       
ADDRESS         CLOB    Y

第二种方法(使用辅助表)
【实验环境模拟】
create table TABLE1
(
  col1 number(9),
  col2 char(20)
);
//尝试修改
ALTER TABLE TABLE1 MODIFY COL1 NUMBER(10); --修改成功,因为表中无数据

//插入数据
INSERT INTO TABLE1 (COL1, COL2) VALUES (1, 'aaa');
//再次尝试修改
ALTER TABLE TABLE1 MODIFY COL2 VARCHAR2(20);--修改失败,因为表中已有数据,不允许直接操作
//创建辅助表T_TABLE1
CREATE TABLE T_TABLE1 AS SELECT * FROM TABLE1;
//删除原表所有数据
truncate table 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 = 'aaa‘; 是没有数据的,需要SELECT * FROM TABLE1 WHERE TRIM(COL2) = 'aaa';

5.给表加注释

  comment column on 表名.列名 is '注释内容';   //修改表的列的注释

  COMMENT ON TABLE MOVO_NEW.TEST_SAKTE  IS '注释内容';  //修改表的注释
1
3
分享到:
评论

相关推荐

    Oracle 数据表修改字段长度

    Oracle数据库中,表中已存在数据字段修改该字段的长度,如有疑问可沟通联系,当积分自动提升到很高的时候欢迎联系,会把积分调低。

    ORACLE中CLOB字段转String类型

    ORACLE中CLOB字段转String类型

    ORACLE 多表查询与数据修改

    oracle 多表查询与数据修改学习笔记,主要是让大家熟悉三个或四个表的连接查询,熟练掌握delete、update与insert的语法。

    详解Oracle修改字段类型方法总结

    最近学习了Oracle修改字段类型方法,留做记录。...3、假设字段有数据,则改为varchar2(40)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题: /*

    Oracle数据库表中字段顺序的修改方法

    问题就是当设计好表结构之后,后期如果需要往表中增加字段,默认会把该字段放到表的最后,并且字段特别多而我们又想把有关联性的字段放在一起,这时就要修改字段顺序。在修改顺序之前,我们先来看看Oracle数据库表中...

    oracle千万级别数据简单操作

    oracle千万级别数据简单操作

    oracle数据库字段值自动加1

    往数据库中添加数据时,字段值自动加1: 1、创建表 2、创建序列 3、创建触发器

    oracle变更数据表字段类型

    oracle变更数据表字段类型 ,简单易懂方便快捷!

    Oracle中用一张表的字段更新另一张表的字段

    在做项目的过程中,发现开发库中某张表的某字段有许多值是空的,而测试库中该字段的值则是有的。  那么,有什么办法能将测试库中该字段的值更新到开发库中呢?  SQL Server中这是比较容易解决的,而Oracle中不...

    Oracle的CLOB大数据字段类型操作方法

    VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同。 在Oracle Database中,VARCHAR2 字段类型,最大值为4000;PL/SQL中 VARCHAR2 变量类型,最大字节长度为...

    oracle使用dblink高速复制表数据的动态存储过程

    本程序不同步blob和clob字段,玩oracle的人都懂,用sql同步此类数据,速度上不去,此类数据应该要用导出导入的方式提升速度。 具体请参阅程序,可根据自已需要进行修改。 参数说明: CREATE OR REPLACE PROCEDURE ...

    oracle建表修改字段

    oracle建表修改字段,数据库简单代码,

    ORACLE查询表最近更改数据的方法

    修改项目时,涉及到了Oracle中许多表的修改(包括:增加、删除字段,修改注释等)。由于开始没有进行记录,造成在上测试机时,忘记了具体修改过哪些表了。后来在网上查找了一些资料,例如: 代码如下: 1、select uat...

    Oracle如何批量将表中字段名全转换为大写(利用简单存储过程)

    今天查询一个数据字段一直提示字符无效,明明在数据库表字段中是存在的; 查询后得知,数据库表字段为小写时,查询需要将字段名小写并加上双引号; 表名同理,我这里表名是大写,暂时不需要改。 搜到一个批量修改...

    KETTLE数据库转换类型例子

    此处主要以两个例子说明KETTLE可支持的数据转换操作,一个说明不同数据库表间的数据提取和加载,一个说明数据文件与数据库表间的数据提取与加载。

    Oracle导Mysql适用于百、千万级别数据迁移

    Oracle导Mysql适用于百、千万级别数据迁移,速度是kettle的10倍以上数据库迁移 数据迁移 千万级 亿万级数据,MySQL oracle关系型 现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库...

    oracle 表和视图.

    4.1 表的创建和操作 4.2 数据完整性和约束条件 4.3 修改表结构 4.4 分区表简介 4.5 视图创建和操作 4.6 阶段训练 4.7 练 习

    Oracle基于日志的数据备份

    在一般的ETL过程中,对于增量抽取,无非是在数据上加时间截,全记录比对,关键字段比对,日志分析抽取等几种方法,要么需要修改原表结构,要么需要大量的算法,要么借助第三方的工具实现。Oracle从9i开始引入的CDC...

Global site tag (gtag.js) - Google Analytics