Oracle修改字段长度及属性的方法

 更新时间:2024年05月10日 08:58:38   作者:蓝涩街灯  
这篇文章主要介绍了Oracle修改字段长度及属性,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

Oracle数据库使用ALTER TABLE MODIFY语法,修改列定义。
语法

alter table table_name modify(column_name 字段类型);

Oracle允许执行多种操作,但主要有以下常用的操作:

  • 修改数据列的可见性(可见或不可见)
  • 修改字段允许或不允许null
  • 修改字段长度
  • 修改列的默认值

修改多个列语法如下:

ALTER TABLE table_name
MODIFY (
    column_name_1 字段类型,
    column_name_2 字段类型,
    ...
);

举例,仍然使用之前建立的数据库表及数据进行测试:Oracle中新建数据表的两种方法(点击前边文字跳转),不了解的自行跳转链接查看,这里就在列下建表及插入数据语句如下:

--实例建表stuinfo_01
create table JT_CS.stuinfo_01
(
  stuid      varchar2(11) not null,--学号:'S'+班号(7位数)+学生序号(3位数)(不能为空)SC200101001
  stuname    varchar2(50) not null,--学生姓名(不能为空)
  sex        char(1) not null,--性别(不能为空)1(男)、2(女)
  age        number(2) not null,--年龄(不能为空)
  classno    varchar2(7) not null,--班号:'C'+年级(4位数)+班级序号(2位数)(不能为空)C200101
  stuaddress varchar2(100) default '地址未录入',--地址 (不填或为空时默认填入‘地址未录入‘)
  grade      char(4) not null,--年级(不能为空)
  enroldate  date,--入学时间
  idnumber   varchar2(18) default '身份证未采集' not null--身份证(不能为空)
)
--插入测试数据
INSERT INTO JT_CS.STUINFO VALUES ('SC200101001','路飞','1','19','C200101','东海哥亚王国风车村','2001','2001/09/01','411428199602569201');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101002','索隆','1','21','C200101','东海霜月村','2001','2001/09/01','411428199602569202');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101003','娜美','2','20','C200101','可可西亚村','2001','2001/09/01','411428199602569203');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101004','乌索普','1','19','C200101','东海西罗布村','2001','2001/09/01','411428199602569204');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101005','山治','1','21','C200101','北海杰尔玛王国','2001','2001/09/01','411428199602569205');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101006','乔巴','1','15','C200101','磁鼓岛','2001','2001/09/01','411428199602569206');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101007','罗宾','2','30','C200101','奥哈拉','2001','2001/09/01','411428199602569207');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101008','弗兰奇','1','34','C200101','南海','2001','2001/09/01','411428199602569208');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101009','布鲁克','1','63','C200101','西海','2001','2001/09/01','411428199602569209');
INSERT INTO JT_CS.STUINFO VALUES ('SC200101010','甚平','1','46','C200101','鱼人岛','2001','2001/09/01','411428199602569210');

查询结果数据如下:

  SELECT * FROM JT_CS.STUINFO_01;

1、修改数据列的可见性(可见或不可见)

通常默认情况下,新建表在未有任何定义的情况下表列都是可见的。我们可以在创建表或使用ALTER TABLE MODIFY语句定义某些列不可见。

--以下语句将SEX列修改为不可见(适用于Oracle 12c)
ALTER TABLE JT_CS.STUINFO_01 
MODIFY SEX INVISIBLE;
--将不可见字段修改为可见(适用于Oracle 12c)
ALTER TABLE JT_CS.STUINFO_01 
MODIFY SEX VISIBLE;

2. 修改字段允许或不允许null

准备测试数据(先制造出一个小问题)

--测试需要,先将原来的enroldate字段路飞的入学时间置空
UPDATE  JT_CS.STUINFO_01 SET enroldate='' WHERE STUID='SC200101001';

修改enroldate字段不予许为空 not null

--修改enroldate字段不予许为空 not null
ALTER TABLE JT_CS.STUINFO_01 
MODIFY enroldate  NOT NULL;

因为刚刚我们清空了“路飞”先生的入学时间,所以执行NOTNULL时系统提示错误,有空值存在,也就是说必须确保现有数据符合新约束(也就是说,如果原来数据中存在NULL是不行的)。

为了解决这个问题,首先我们需要将enroldate字段所有为空的列进行填充

--更新填充字段
UPDATE 
    JT_CS.STUINFO_01
SET 
    enroldate='2001-09-30' WHERE STUID='SC200101001' ;

然后改变enroldate列的约束:

--修改约束不允许为空(not null)    
ALTER TABLE JT_CS.STUINFO_01 
MODIFY enroldate  NOT NULL;

3. 修改字段长度

--将身份证号字段长度大小扩充到20
ALTER TABLE JT_CS.STUINFO_01 MODIFY IDNUMBER VARCHAR2(20);

注意:要缩短或扩充列的大小,请确保列中的所有数据都符合新的大小,否则语句将无法进行执行。

4. 修改列的默认值

添加一个名为status的新列,默认值为1到JT_CS.STUINFO_01表中

--添加一个新列,然后默认值设置成 1
ALTER TABLE JT_CS.STUINFO_01 ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;

将添加的新列status的默认值修改为0

--设置成默认值0
ALTER TABLE JT_CS.STUINFO_01 MODIFY status DEFAULT 0;

插入一条新数据进行测试

--按指定的字段插入数据
INSERT INTO JT_CS.STUINFO_01 ( STUID, STUNAME, SEX, AGE, CLASSNO, STUADDRESS, GRADE, ENROLDATE, IDNUMBER) VALUES ('SC200101011','萨博','1','46','C200101','鱼人岛','2000','2001/09/01','411428199602569211');

结果查询

到此这篇关于Oracle修改字段长度及属性的文章就介绍到这了,更多相关Oracle修改字段长度及属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle 遍历游标的四种方式汇总(for、fetch、while、BULK COLLECT)

    Oracle 遍历游标的四种方式汇总(for、fetch、while、BULK COLLECT)

    这篇文章主要介绍了Oracle 遍历游标的四种方式汇总(for、fetch、while、BULK COLLECT),帮助大家更好的理解和使用Oracle数据库,感兴趣的朋友可以了解下
    2020-10-10
  • Oracle如何获取当前库中所有表空间创建的语句

    Oracle如何获取当前库中所有表空间创建的语句

    在Oracle数据库管理中,通过使用dbms_metadata.get_ddl函数,可以方便地获取表空间的DDL创建语句,首先利用select查询构造需要的DDL语句,然后执行得到的查询语句即可获取对应表空间的创建语句,这种方法适用于数据库迁移或备份时重建表空间的需求
    2024-10-10
  • Oracle Index索引无效的原因与解决方法

    Oracle Index索引无效的原因与解决方法

    这篇文章主要给大家介绍了关于Oracle Index索引无效的原因与解决方法,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • EXISTS关键字在Oracle中的简单使用例子

    EXISTS关键字在Oracle中的简单使用例子

    在Oracle中IN和EXISTS都是用于子查询的比较运算符,但它们的使用方式和操作结果有所不同,这篇文章主要给大家介绍了关于EXISTS关键字在Oracle中的简单使用,需要的朋友可以参考下
    2024-04-04
  • Oracle执行计划及性能调优详解使用方法

    Oracle执行计划及性能调优详解使用方法

    在Oracle数据库中,通过使用EXPLAIN PLAN、AWR、SQL Trace等工具可以对SQL性能进行详细分析,EXPLAIN PLAN可以展示SQL执行计划和关键性能指标如操作类型、成本、行数等,本文给大家介绍Oracle执行计划及性能调优详解使用方法,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • Oracle的CLOB大数据字段类型操作方法

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

    VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同。接下来通过本文给大家分享Oracle的CLOB大数据字段类型操作方法,感兴趣的朋友一起看看吧
    2017-08-08
  • oracle数据库中如何处理clob字段方法介绍

    oracle数据库中如何处理clob字段方法介绍

    在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,本文将详细将介绍oracle数据库中如何处理clob字段方法,需要的朋友可以参考下
    2012-11-11
  • Oracle表空间管理和用户管理介绍

    Oracle表空间管理和用户管理介绍

    大家好,本篇文章主要讲的是Oracle表空间管理和用户管理介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • EF 配置Oracle数据库数据库连接字符串的实例

    EF 配置Oracle数据库数据库连接字符串的实例

    下面小编就为大家带来一篇EF 配置Oracle数据库数据库连接字符串的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Oracle数据库游标连接超出解决方案

    Oracle数据库游标连接超出解决方案

    这篇文章主要介绍了Oracle数据库游标连接超出解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论