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’ 進行插入(賦值)操作就會報出異常。
如果有其他對表的操作報出這種異常,原因大致如此。
