Oracle中字段的修改操作语法
| 对字段操作 | 操作方法 |
| 更新字段名 | alter table TABLE_NAME rename column column_old to column_new; |
| 添加字段 | alter table TABLE_NAME add COLUMN_NAME varchar(10); |
| 删除字段 | alter table TABLE_NAME drop column COLUMN_NAME; |
| 添加字段并附值 | alter table TABLE_NAME ADD COLUMN_NAME NUMBER(1) DEFAULT 1; |
| 修改字段值 | update TABLE_NAME set filedname=value where filedname=value; |
| 修改字段数据类型 | alter table tablename modify filedname varchar2(20); |

SQL> select * from v$version; BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

1.修改字段数据类型时,如果该列有数据则报ORA-01439: column to be modified must be empty to change datatype,此时需要通过另外一种方法修改:

SQL> alter table zyt add id_temp varchar2(10); Table altered. SQL> commit; Commit complete. SQL> select * from zyt; NAME ID ID_TEMP
---------- ---------- ----------
zyt1 1
david 2 SQL> alter table zyt rename column id to id_bak; Table altered. SQL> select * from zyt; NAME ID_BAK ID_TEMP
---------- ---------- ----------
zyt1 1
david 2 SQL> desc zyt;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
ID_BAK NOT NULL NUMBER(2)
ID_TEMP VARCHAR2(10) SQL> update zyt set ID_TEMP = cast(ID_BAK as varchar2(10)); 2 rows updated. SQL> commit; Commit complete. SQL> select * from zyt; NAME ID_BAK ID_TEMP
---------- ---------- ----------
zyt1 1 1
david 2 2 SQL> alter table zyt drop column ID_BAK; Table altered. SQL> commit; Commit complete. SQL> select * from zyt; NAME ID_TEMP
---------- ----------
zyt1 1
david 2 SQL> desc zyt;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
ID_TEMP VARCHAR2(10)

备注:这种方法能满足需求,因新增字段默认添加到表末尾,有可能发生行迁移,对应用程序会产生影响,同时也涉及复杂数据,不算最好的方法
2.建立一个中间跳板,临时存储数据

SQL> desc zyt;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
ID VARCHAR2(10) SQL> select * from zyt; NAME ID
---------- ----------
zyt1 1
david 2 SQL> alter table zyt add id_temp VARCHAR2(10) Table altered. SQL> select * from zyt; NAME ID ID_TEMP
---------- ---------- ----------
zyt1 1
david 2 SQL> update zyt set ID_TEMP=id,id=null; 2 rows updated. SQL> select * from zyt; NAME ID ID_TEMP
---------- ---------- ----------
zyt1 1
david 2 SQL> alter table zyt modify id number(10); Table altered. SQL> desc zyt;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
ID NUMBER(10)
ID_TEMP VARCHAR2(10) SQL> update zyt set id=ID_TEMP,ID_TEMP=null; 2 rows updated. SQL> select * from zyt; NAME ID ID_TEMP
---------- ---------- ----------
zyt1 1
david 2 SQL> alter table zyt drop column ID_TEMP; Table altered. SQL> commit; Commit complete. SQL> select * from zyt; NAME ID
---------- ----------
zyt1 1
david 2 SQL> desc zyt;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(10)
ID NUMBER(10)

备注:第二种方法,是增加一个与被修改的列类型一样的列,之后将要修改列的数据复制到新增的列并置空要修改的列,之后修改数据类型,再从新增列将数据拷贝回来,该过程涉及两次数据复制,如果是数据量很多,会比较慢同时也会产生很多undo和redo;优点是数据不会发生行迁移。
Oracle中字段的修改操作语法的更多相关文章
- Oracle中有关数学表达式的语法
Oracle中有关数学表达式的语法 三角函数 SIN ASIN SINHCOS ACOS COSHTA ...
- oracle 中proc和oci操作对缓存不同处理
oracle 中proc和oci操作对缓存不同处理
- oracle中的层级递归查询操作
oracle中的层级操作非常方便,在使用之后爱不释手,以前要实现该种数据查询操作,需要非常复杂的实现过程.在oracle中通过connect by可以实现前面的目的,通常情况下层级查询基本都能实现递归 ...
- oracle中有关表的操作
在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 : select table_name from user_ ...
- 对oracle中date/timestamp的操作
设置oracle中date的会话格式为 'yyyy-mm-dd hh24:mi:ss' alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss ...
- oracle 表字段添加 修改 删除语法
修改列名 alter table 表明 rename column rename 老列名 to 新列名添加 字段alter table 表名 add(字段名 类型):删除字段alter table 表 ...
- Oracle中日期时间的操作比较和加减-入门基础(转)
Oracle关于时间/日期的操作 1.日期时间间隔操作 当前时间减去7分钟的时间 select sysdate,sysdate - interval '7' MINUTE from dual ...
- oracle中update语句修改多个字段
如需要修改下列数据:表名为student 一般会这样写: update student set sname = '李四', sage = 20, sbirthday = to_date('2010-0 ...
- Oracle中快速查询和操作某个用户下的所有表数据信息
一.禁止所有的外键约束 在pl/sql developer下执行如下语句:SELECT 'ALTER TABLE ' || table_name || ' disable CONSTRAINT ' | ...
随机推荐
- ios9基础知识总结(一)
I--load 类被加载时自动调用,只要类的项目中,运行时就会加载.类一加载,此方法就会调用 //类被加载时调用,只要类的项目中,运行时就会加载,类一加载,此方法就调用 + (void)load { ...
- 转:C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
1.int适合简单数据类型之间的转换,C#的默认整型是int32(不支持bool型); 2.int.Parse(string sParameter)是个构造函数,参数类型只支持string类型; 3. ...
- mysql 建表、查表、查表结构
进入数据库: mysql> use sunshine_blog;输出: Database changed 查数据库表: mysql> show tables;输出: +---------- ...
- Mysql查询高速缓存区
为了提高查询速度,Mysql会维护一个内存区域(官方文档指出,大小至少41984B)对查询结果进行缓存,当查询时发现缓存区里有数据则直接返回结果而不用去执行sql语句. 查询命中的条件 每个缓存查询至 ...
- C语言-数据的快速引用
1.常量:程序运行中,不会改变 整形常量 实形常量 字符常量:使用单引号引起的单个字符或者转移字符 ‘a’ 字符串常量:使用双引号引起的单个或者多个字符序列 "ab",存储的时候, ...
- 【Android 错误记录】android.os.NetworkOnMainThreadException 异常问题
最近自己学习开发一个小app,想根据网络来判断一些逻辑,但是运行应用时遇到了这个错误 android.os.NetworkOnMainThreadException 后来,查询了一些信息,发现原因就是 ...
- java.util.logging.Logger基础教程
从JDK1.4开始即引入与日志相关的类java.util.logging.Logger,但由于Log4J的存在,一直未能广泛使用.综合网上各类说法,大致认为: (1)Logger:适用于小型系统,当日 ...
- Android 使用BroadcastReceiver的几种方法
发送自定义广播 全局广播 发送标准广播 1.定义广播接收器.(在发送广播前,需要先定义一个广播接收器,不然发了也是白发) public class MyBroadcastReceiver extend ...
- c#局域网聊天软件的实现
本软件是基于大学寝室局域网聊天的思路.c#源代码如下: using System; using System.Drawing; using System.Collections; using Syst ...
- plsql基本语法(
1. 定义常量的语法格式 常量名 constant 类型标识符 [not null]:=值; 常量,包括后面的变量名都必须以字母开头,不能有空格,不能超过30个字符长度,同时不能和保留字同 ...