Oracle数据库:ORA-54013错误解决办法

ORA-54013: 不允许对虚拟列执行 INSERT 操作

这是Oracle 11 的新特性 —— 虚拟列。

在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。现在Oracle 11允许我们直接在表上使用虚拟列来存储表达式。虚拟列的值是不存储在磁盘的,它们是在查询时根据定义的表达式临时计算的。我们不能往虚拟列中插入数据,我们也不能隐式的添加数据到虚拟列,我们只能使用物理列来插入数据。然后可以查询虚拟列的值,表达式是在查询的时候即时计算的。索引和约束同样可以应用在虚拟列上,我们也可以为虚拟列创建外键。

 

下面使用的数据表名是:APEX_CW_月结账单明细详情表

使用oracle中的命令窗口,输入语句查看表结构:SQL>desc APEX_CW_月结账单明细详情表;

执行后看到如下表结构:

Name                 Type         Nullable Default                      Comments 
-------------------- ------------ -------- ---------------------------- -------- 
PK_MONTHBILLDETAILID VARCHAR2(35)                                                
FK_MONTHBILLID       VARCHAR2(18) Y                                              
BARCODE              VARCHAR2(15) Y                                              
CUSTCODE             VARCHAR2(8)  Y                                              
CUSTNAME             VARCHAR2(50) Y                                              
EXCHARGE             NUMBER(18,2) Y                                              
CITYCODE             VARCHAR2(3)  Y                                              
EXPORTDAY            DATE         Y                                              
ORICHARGE            NUMBER(18,2) Y                                              
INCOMEDCHARGE        NUMBER(18,2) Y                                              
ISHANDLED            VARCHAR2(1)  Y                                              
PAYERID              VARCHAR2(8)  Y                                              
PAYERNAME            VARCHAR2(50) Y                                              
MANAGECITY           VARCHAR2(10) Y                                              
CITYNAME             VARCHAR2(50) Y                                              
DESTINCITY           VARCHAR2(3)  Y                                              
DESTINCITYNAME       VARCHAR2(50) Y                                              
ITEM                 VARCHAR2(6)  Y                                              
SERVERTYPE           VARCHAR2(1)  Y                                              
DESTINCOUN           CHAR(2)      Y                                              
ORICURRENCY          VARCHAR2(3)  Y                                              
TAXAMOUNT            FLOAT(63)    Y                                              
CHARGEWEIGHT         NUMBER(10,3) Y                                              
EXPORTCITY           VARCHAR2(3)  Y                                              
STRFD1               VARCHAR2(20) Y                                              
CREATETIME           DATE         Y                                              
MONTHBILLTYPE        VARCHAR2(2)  Y        SUBSTR("FK_MONTHBILLID",1,1)  

 从上面看到最后一行的字段 ‘MONTHBILLTYPE’ 是通过第二行的字段 ‘FK_MONTHBILLID’ 得到的,所以如果对该表中这个字段 ‘MONTHBILLTYPE’ 进行插入(赋值)操作就会报出异常。

如果有其他对表的操作报出这种异常,原因大致如此。

 

posted on 2016-10-20 22:53  西城墨客  阅读(3500)  评论(0编辑  收藏  举报

导航