搜索
首页数据库Oracleoracle数据库怎么修改字段

oracle数据库怎么修改字段

Mar 02, 2022 pm 06:13 PM
oracle数据库

在oracle中,可以利用“ALTER TABLE MODIFY”语句来修改字段,语法为“ALTER TABLE 表名 MODIFY 字段名 需要执行的操作;”;常用操作有:修改列的可见性、更改列的默认值、修改虚拟列的表达式等。

oracle数据库怎么修改字段

本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。

oracle数据库怎么修改字段

在oracle中,可以利用“ALTER TABLE MODIFY”语句来修改字段,更改现有字段的定义。

要更改表中列的定义,请按如下所示使用ALTER TABLE MODIFY列语法:

ALTER TABLE 表名 
MODIFY 字段名 需要执行的操作;

语句很直接。要修改表的列,需要指定要执行的列名,表名和操作。

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

  • 修改列的可见性

  • 允许或不允许NULL值

  • 缩短或扩大列的大小

  • 更改列的默认值

  • 修改虚拟列的表达式

要修改多个列,请使用以下语法:

ALTER TABLE 表名
MODIFY (
    字段名1 action,
    字段名2 action,
    ...
);

Oracle ALTER TABLE MODIFY列示例

首先,为演示创建一个名为accounts的新表:

-- 12c语法
CREATE TABLE accounts (
    account_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    first_name VARCHAR2(25) NOT NULL,
    last_name VARCHAR2(25) NOT NULL,
    email VARCHAR2(100),
    phone VARCHAR2(12) ,
    full_name VARCHAR2(51) GENERATED ALWAYS AS( 
            first_name || ' ' || last_name
    ),
    PRIMARY KEY(account_id)
);

其次,向accounts表中插入一些行:

INSERT INTO accounts(first_name,last_name,phone)
VALUES('Trinity',
       'Knox',
       '410-555-0197');


INSERT INTO accounts(first_name,last_name,phone)
VALUES('Mellissa',
       'Porter',
       '410-555-0198');


INSERT INTO accounts(first_name,last_name,phone)
VALUES('Leeanna',
       'Bowman',
       '410-555-0199');

第三,通过使用下面的SELECT语句验证插入操作:

SELECT
    *
FROM
    accounts;

执行上面查询语句,得到以下结果 -

1.png

1. 修改列的可见性

在Oracle 12c中,可以将表列定义为不可见或可见。不可见列不可用于查询,如:

SELECT
    *
FROM
    table_name;

或者,

DESCRIBE table_name;

都是查到不到不可见列的。

但是,可以通过在查询中显式指定不可见列来查询:

SELECT
    invisible_column_1,
    invisible_column_2
FROM
    table_name;

默认情况下,表列是可见的。可以在创建表或使用ALTER TABLE MODIFY列语句时定义不可见列。

例如,以下语句使full_name列不可见:

ALTER TABLE accounts 
MODIFY full_name INVISIBLE;

执行再次查询表中数据,得到以下结果 -

2.png

以下语句返回accounts表除了full_name列以外的所有列中返回数据:

SELECT
    *
FROM
    accounts;

这是因为full_name列是不可见的。要将列从不可见变为可见,请使用以下语句:

ALTER TABLE accounts 
MODIFY full_name VISIBLE;

2. 允许或不允许null示例

以下语句将email列更改为接受非空(not null)值:

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;

但是,Oracle发出以下错误:

SQL Error: ORA-02296: cannot enable (OT.) - null values found

因为当将列从可为null改为not null时,必须确保现有数据符合新约束(也就是说,如果原来数据中NULL是不行的)。

为了解决这个问题,首先更新email列的值:

UPDATE 
    accounts
SET 
    email = LOWER(first_name || '.' || last_name || '@oraok.com') ;

请注意,LOWER()函数将字符串转换为小写字母。

然后改变email列的约束:

ALTER TABLE accounts 
MODIFY email VARCHAR2( 100 ) NOT NULL;

现在,它应该就会按预期那样工作了。

3. 扩大或缩短列示例的大小

假设要添加国际代码到phone列上,比如:前缀加上+86。 在修改列的值之前,必须使用以下语句扩大phone列的大小:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 24 );

现在,我们可以更新电话号码的数据了:

UPDATE
    accounts
SET
    phone = '+86 ' || phone;

以下语句验证更新:

SELECT
    *
FROM
    accounts;

执行上面查询语句结果中,应该可以看到原电话号码前缀有加上+86的国际区号了。

3.png

要缩短列的大小,请确保列中的所有数据都符合新的大小。

例如,尝试将phone列的大小缩减到12个字符:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );

Oracle数据库发出以下错误:

SQL Error: ORA-01441: cannot decrease column length because some  value is too big

要解决这个问题,首先,应该从电话号码中删除国际代码(即:+86):

UPDATE
    accounts
SET
    phone = REPLACE(
        phone,
        '+86 ',
        ''
    );

REPLACE()函数用一个新的子字符串替换一个子字符串。在这种情况下,它将用空字符串替换+86

然后缩短phone列的大小:

ALTER TABLE accounts 
MODIFY phone VARCHAR2( 12 );

4. 修改虚拟列

假设按以下两列的格式填写全名:

last_name, first_name

为此,可以更改虚拟列full_name的表达式,如下所示:

ALTER TABLE accounts 
MODIFY full_name VARCHAR2(52) 
GENERATED ALWAYS AS (last_name || ', ' || first_name);

以下语句验证修改:

SELECT
    *
FROM
    accounts;

执行上面查询语句,可以看到以下结果 

4.png

5. 修改列的默认值

添加一个名为status的新列,默认值为1accounts表中。参考以下语句 -

ALTER TABLE accounts
ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;

当执行了该语句,就会将accounts表中的所有现有行的status列中的值设置为1

要将status列的默认值更改为0,请使用以下语句:

ALTER TABLE accounts 
MODIFY status DEFAULT 0;

可以在accounts表中添加一个新行来检查status列的默认值是0还是1

INSERT INTO accounts ( first_name, last_name, email, phone )
VALUES ( 'Julia',
         'Madden',
         'julia.madden@oraok.com',
         '410-555-0200' );

现在,查询accounts表中的数据:

SELECT
  *
FROM
  accounts;

执行上面查询语句,应该看类似下面的结果 

5.png

正如所看到的那样,ID4的账户的status列的值是0

推荐教程:《Oracle教程

以上是oracle数据库怎么修改字段的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用Oracle软件:数据库管理及其他使用Oracle软件:数据库管理及其他Apr 24, 2025 am 12:18 AM

Oracle软件除了数据库管理外,还用于JavaEE应用、数据网格和高性能计算。1.OracleWebLogicServer用于部署和管理JavaEE应用。2.OracleCoherence提供高性能的数据存储和缓存服务。3.OracleExadata用于高性能计算。这些工具使得Oracle在企业IT架构中扮演了更加多元化的角色。

甲骨文在商业世界中的作用甲骨文在商业世界中的作用Apr 23, 2025 am 12:01 AM

Oracle不仅是数据库公司,还是云计算和ERP系统的领导者。1.Oracle提供从数据库到云服务和ERP系统的全面解决方案。2.OracleCloud挑战AWS和Azure,提供IaaS、PaaS和SaaS服务。3.Oracle的ERP系统如E-BusinessSuite和FusionApplications帮助企业优化运营。

Oracle Software正在行动:现实世界中的示例Oracle Software正在行动:现实世界中的示例Apr 22, 2025 am 12:12 AM

Oracle软件在现实世界中的应用包括电商平台和制造业。1)在电商平台,OracleDatabase用于存储和查询用户信息。2)在制造业,OracleE-BusinessSuite用于优化库存和生产计划。

Oracle软件:应用程序和行业Oracle软件:应用程序和行业Apr 21, 2025 am 12:01 AM

Oracle软件在多领域大放异彩的原因是其强大的应用性和定制化解决方案。1)Oracle提供从数据库管理到ERP、CRM、SCM的全面解决方案,2)其解决方案可根据金融、医疗、制造等行业特性进行定制,3)成功案例包括花旗银行、梅奥诊所和丰田汽车,4)优势在于全面性、定制化和可扩展性,但挑战包括复杂性、成本和集成问题。

在MySQL和Oracle之间进行选择:决策指南在MySQL和Oracle之间进行选择:决策指南Apr 20, 2025 am 12:02 AM

选择MySQL还是Oracle取决于项目需求:1.MySQL适合中小型应用和互联网项目,因其开源、免费和易用性;2.Oracle适用于大型企业核心业务系统,因其强大、稳定和高级功能,但成本较高。

甲骨文的产品:深度潜水甲骨文的产品:深度潜水Apr 19, 2025 am 12:14 AM

Oracle的产品生态包括数据库、中间件和云服务。1.OracleDatabase是其核心产品,支持高效的数据存储和管理。2.中间件如OracleWebLogicServer连接不同系统。3.OracleCloud提供全套云计算解决方案。

MySQL和Oracle:功能和功能的关键差异MySQL和Oracle:功能和功能的关键差异Apr 18, 2025 am 12:15 AM

MySQL和Oracle在性能、扩展性和安全性方面各有优势。1)性能:MySQL适合读操作和高并发,Oracle擅长复杂查询和大数据处理。2)扩展性:MySQL通过主从复制和分片扩展,Oracle使用RAC提供高可用性和负载均衡。3)安全性:MySQL提供细粒度权限控制,Oracle则有更全面的安全功能和自动化工具。

甲骨文:数据库管理甲骨文:数据库管理Apr 17, 2025 am 12:14 AM

Oracle被称为数据库管理的“Powerhouse”是因为其高性能、可靠性和安全性。1.Oracle是一个关系数据库管理系统,支持多种操作系统。2.它提供强大的数据管理平台,具有可扩展性、安全性和高可用性。3.Oracle的工作原理包括数据存储、查询处理和事务管理,支持性能优化技术如索引、分区和缓存。4.使用示例包括创建表、插入数据和编写存储过程。5.性能优化策略包括索引优化、分区表、缓存管理和查询优化。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能