概述
下面介绍两种 在Oracle中修改表的列名的方式。
一、(在sqlplus工具下)使用如下命令:
alter table <table_name> rename column <column_old_name> to <columne_new_name>;
注释:
2、博友二说:可以用如下办法达到修改表列名的目的:在表上添加一个新列,该新列的列名就是你想取的那个列名,之后用你想修改它列名的那个列下的数据插入到该新列中,最好删除你想修改它列名的那个列。
3、博友三说:8i以下版本只能用重新建一个新表的办法:
先修改表名: alter table <table_name> renameato b; //这里 <table_name> 为a
再以原来表名创建一个新表:create table a (..,new_col_name,..) as select ..,old_col_name,..) from b;
顺便说下,如果 alter table a rename to b; 写成了alter table a rename a to b; ,则会提示如下:
ERROR 位于第 1 行:
ORA-14155: PARTITION 或 SUBPARTITION 关键字丢失
由此看出,
如果表a不是分区表,那么就不能写成alter table a rename a to b;这个样子。
如果表a是分区表, 那么就可以写成alter table a rename a to b;这个样子,但是得加上关键字PARTITION 或 SUBPARTITION,即
alter table a rename PARTITION c to b;,其中c是分区表a上一个分区的名字。
二、使用存储过程sp_rename修改列名及表名:
sql 修改列名及表名 sp_rename
sql 修改列名及表名
因需求变更要改表的列名,平常都是跑到Enterprise manager中选取服务器->数据库->表,然后修改表,这样太麻烦了,查了一下,可以用script搞定,
代码如下:
EXEC sp_rename '表名.[原列名]', '新列名', 'column'
******************************************************************************************************
Transact-SQL 参考
sp_rename
更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
语法
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
注释:
被方括号围起来的内容,表示在写sp_rename命令时可以省略,即这里诸如@objname =的参数名可以不用写。
参数
[@objname =] 'object_name'
是用户对象(表、视图、列、存储过程、触发器、默认值、数据库、对象或规则)或数据类型的当前名称。
如果要重命名的对象是表中的一列,那么 object_name 必须为 table.column 形式。如果要重命名的是索引,那么 object_name 必须为 table.index 形式。
参数object_name 为 nvarchar(776) 类型,无默认值。
[@newname =] 'new_name'
是指定对象的新名称。new_name 必须是名称的一部分,并且要遵循标识符的规则。
参数newname 是 sysname 类型,无默认值。
[@objtype =] 'object_type'
是要重命名的对象的类型。
参数object_type 为 varchar(13) 类型,其默认值为 NULL,可取下列值。
值 描述
COLUMN 要重命名的列。
DATABASE 用户定义的数据库。要重命名数据库时需用此选项。
INDEX 用户定义的索引。
OBJECT 在 sysobjects(表)中跟踪的类型的项目。
例如,OBJECT 可用来重命名约束(CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、用户表、视图、存储过程、触发器和规则等对象。
USERDATATYPE 即通过执行 sp_addtype 而添加的用户定义数据类型。
返回代码值
0(成功)或非零数字(失败)
注释
只能更改当前数据库中的对象名称或数据类型名称。大多数系统数据类型和系统对象的名称不能更改。
重命名视图时,sysobjects 表中有关该视图的信息将得到更新。重命名存储过程时,sysobjects 表中有关该过程的信息将得到更新。
每当重命名 PRIMARY KEY 或 UNIQUE 约束时,sp_rename 都会自动为相关联的索引重命名。如果重命名的索引与 PRIMARY KEY 约束相关联,那么 sp_rename 也会自动重命名主键。
重要 重命名存储过程和视图后,请清空过程高速缓存以确保所有相关的存储过程和视图都重新编译。
由于存储过程和视图都不存储数据,所以这两种对象均可快速删除和重建。重命名文本对象时,要获得最佳结果,应删除并使用其新名称重新创建对象。
权限
sysadmin 固定服务器角色成员、db_owner 和 db_ddladmin 固定数据库角色成员或对象所有者可以执行 sp_rename。
只有 sysadmin 和 dbcreator 固定服务器角色成员才能将"database"作为 object_type 来执行 sp_rename。
示例
A. 重命名表
下例将表 customers 重命名为 custs。
EXEC sp_rename 'customers', 'custs'
B. 重命名列
下例将表 customers 中的列 contact title 重命名为 title。
EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN' //列名中含有空格,则在执行sp_rename时要将列名用方括号[]围起来表示做一个整体
请参见
ALTER TABLE
CREATE DEFAULT
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
数据类型
SETUSER
sp_addtype
sp_depends
sp_renamedb
系统存储过程
参考:
本文所用的修改表列名的方式是一个集成操作,执行本文所说的方式的具体过程,其实质是在做《如何在数据字典中修改Oracle的表列名》里提到的那些内部修改操作。即本文的操作是表象,《如何在数据字典中修改Oracle的表列名》中所做的操作才是本质。
如何在数据字典中修改Oracle的表列名
sysobjects 表是什么?
下面两种方式将表 customers 中名叫123 的列重命名为 title:
1、alter table customers rename column “123” to title ;
2、EXEC sp_rename 'customers.123', 'title', 'COLUMN'
由此看出:
双引号引起的内容只能用于表示诸如表的表名和列名等数据库对象的一些标识符(即就是数据库对象名等),而不是表示一个字符串,所以双引号适用的范围是SQL语句中,SQL语句包括DDL(create、alter、drop)、DML、DQL、DCL中,即只能在SQL语句上使用。当然,在SQL语句上,表名或列名等也可以不加双引号的,类似于程序源码中的变量名那样。表名或列名等如果加了双引号后,双引号内的字符是区分大小写的,而表名或列名等存在数据字典中是大写的形式存的,所以如果你写的表名里含有小写字符,且又加了双引号,则该表名在在数据字典中是找不到的。
单引号引起的内容则表示是一个字符串,单引号适用的范围是如存储过程、函数等的参数中、字符串变量等,还有就是SQL语句中双引号适用的位置外的其他位置。
最后
以上就是义气冬日为你收集整理的Oracle中修改表列名,用SQL语句的方式sql 修改列名及表名 sp_rename如何在数据字典中修改Oracle的表列名的全部内容,希望文章能够帮你解决Oracle中修改表列名,用SQL语句的方式sql 修改列名及表名 sp_rename如何在数据字典中修改Oracle的表列名所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复