ORACLE-1:虚拟列影响alter修改表字段操作!
一、问题:
昨天想要修改Oracle数据库中某张表的某个字段,发现怎么都修改不成功!!!并给出了如下提示:
ORA-54031:要删除或修改的列由某个虚拟列表达式使用
二、啥是“虚拟列” 【不可见的列】
虚拟列的创建一般是数据库自动创建的,当然也可以手动创建。
什么时候创建:表中的数据,大量或频繁的发生变化的时候,数据库一般会自动创建虚拟列!
我觉得截一个漂亮的图,比我的一个字一个字的敲的更容易理解!哈哈哈!

Oralce 的虚拟列解决了以前很多需要使用触发器或者需要通过代码进行计算统计才能产生的数据信息。以前每次对其他的列进行统计,产生新列的时候都是采用在select 语句中通过统计计算增加新列的方法,执行效率很低,而且由于使查询SQL语句变得冗长、复杂很容易出错。严重的降低了开发效率和程序的执行效率。Oralce虚拟列的引入解决了这个问题。
Oralce 的虚拟列也有一些问题。不能使用insert into talbe_name values ().语句,在向含有虚拟列的表中添加数据时,要求insert语句的必须把添加的表的列名写出来。insert into table_name (list1,list2,...listend)列名中不能出现虚拟列名,否则会提示错误。
下面罗列一下解决方案:
二、几种解决方案
(1)先备份数据,备份表结构,再delete该表,再创建表(修改列信息),再导入数据!
数据量少的时候,无所谓,可以这么做,但是如果数据量过多,那么弊端就很明显了!
(2)drop当前虚拟列。流程如下:
--:查询指定表的虚拟列信息:
--select column_name,data_default,hidden_column
--from user_tab_cols
--where table_name='CB_BATCH_FLOW' AND column_name='BFL_OPRNO' --说明:修改步骤:
--(1)先查询user_tab_cols表.列的虚拟列data_default字段的信息,取其中的HASH值
--(2)如果(1)查到了HASH值,才需要执行exec 删除该列的虚拟列操作,如果没有查找HASH值,则不需要删除虚拟列
--(3)删除虚拟列之后,此时可以alter
--格式:
-- exec dbms_stats.drop_extended_stats('ebank','CB_BATCH_FLOW','BFL_CSTNO,CCP_USERID)'); ---删除虚拟列
-- alter table CB_BATCH_FLOW modify BFL_CSTNO varchar2(10); ---修改列信息
-- select dbms_stats.create_extended_stats('ebank','CB_BATCH_FLOW','(CCP_CSTNO,CCP_USERID)') FROM DUAL; ---新增虚拟列
执行截图:
1、exec 执行方法参数传入错误

2、成功删除虚拟列

3、成功创建一个虚拟列

但是,成功创建的虚拟列的在:user_tab_cols表中的COLUMN_NAME字段存入的值是随机的,
ORACLE-1:虚拟列影响alter修改表字段操作!的更多相关文章
- orcle增删改操作及alter修改表字段操作
orcle增删改操作:操作前确保当前用户有增删改的权限. --创建表 create table itcast( pid ), pname ) ); drop table itcast; --复制表 c ...
- Oracle 11g 虚拟列 Virtual Column介绍
Oracle 11G 虚拟列 Virtual Column Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: ...
- mysql中修改表字段名/字段长度/字段类型详解
在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...
- MySQL修改表的默认字符集和修改表字段的默认字符集
修改表的默认字符集: ALTER TABLE table_name DEFAULT CHARACTER SET character_name; 修改表字段的默认字符集: ALTER TABLE tab ...
- atitit查询表修改表字段没反应--解锁锁定的表
atitit查询表修改表字段没反应--解锁锁定的表 查询表修改表字段没反应 要是使用gui 没反应,最好使用cmd 方式,不卉不个gui 锁上.. ALTER TABLE t_mb_awardweix ...
- db2中修改表字段的长度,查看表字段长度,以及查看表字段已存放值大小
修改表字段语句: alter table 表名 alter column 字段名 set data type varchar(7700) 如: ALTER TABLE JV_BI_BACK_OPER ...
- MySQL修改表字段相关信息
昨天收获颇多,首先回顾一下有关mysql的内容. 我在查询表信息时,出现了 empty set 0.00 sec 的错误,我很奇怪,仔细检查发现原来是表字段名称写错了, 于是我想修改字段名称,经过查询 ...
- MySQL知识补充(表字段操作、视图、触发器、事物、存储过程、内置函数、流程控制、索引、慢查询)
今日内容概要 表字段操作补充(掌握) 视图(了解) 触发器(了解) 事务(掌握) 存储过程(了解) 内置函数(了解) 流程控制(了解) 索引(熟悉) 内容详细 1.表字段操作补充 # 1.添加表字段 ...
- MySQL 表字段操作
MySQL 表字段操作 一.增加表字段 1)mysql> alter table 二.删除表字段 三.修改表字段
随机推荐
- textView 添加超链接(两种实现方式)
在textView添加超链接,有两种方式,第一种通过HTML格式化你的网址,一种是设置autolink,让系统自动识别超链接,下面为大家介绍下这两种方法的实现 在textView添加超链接,有两种方式 ...
- 事务之四:Spring事务--原理
一.Spring事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: ...
- Rest之路 - Rest架构中的重要概念
资源 在Rest的架构之内,讲一切内容都是为资源.每一个资源都被定义为一个URI. 格式: <protocol>://<service-name>/<ResourceTy ...
- 浏览器访问IPv6地址
http://[IPv6]:port/index.html http://[3ffe:3201:1200:1::91]:8080/index.html 目前现在的网络运营商基本都不支持基于IPv6地址 ...
- 初学Python--列表(List)
1.索引 列表中的元素类型未必统一,如: listExample=[1,2,'a','b'] 元素下标索引以0开始 firstEle=listExample[0] 不能进行越界索引,但可以倒序索引 l ...
- 每天一个Linux命令 - 【groupadd】
[命令]:grouadd [语法]:groupadd [选项] [参数] [功能介绍]:groupadd 命令勇于创建新的工作组,新工作组的信息将被添加的系统文件中. [选项说明]: -g < ...
- eclipse+minGW 调试ffmpeg错误:No symbol table is loaded. Use the "file" command.
转载地址:http://www.blogjava.net/fancydeepin/archive/2012/11/19/391520.html 数据结构第二篇: eclipse SDK 安装和配置 ...
- 动态规划——最长不下降子序列(LIS)
最长不降子序列是这样一个问题: 下面介绍动态规划的做法. 令 dp[i] 表示以 A[i] 结尾的最长不下降序列长度.这样对 A[i] 来说就会有两种可能: 如果存在 A[i] 之前的元素 A[j] ...
- HDU ACM Fibonacci
Problem Description Fibonacci numbers are well-known as follow: Now given an integer N, please find ...
- django dynamic model
django model 首先对于一个习惯用django model的骚年来说,你肯定对django model自定制用的很熟悉,但突然让你用django dynamic model,也许会有很多人懵 ...