ORA-54013: 不允許對虛擬列執行 INSERT 操作 這是Oracle 11 的新特性 —— 虛擬列。 在以前的Oracle 版本,當我們需要使用表達式或者一些計算公式時,我們會創建資料庫視圖,如果我們需要在這個視圖上使用索引,我們會創建基於函數的索引。現在Oracle 11允許我們直接在表 ...
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’ 進行插入(賦值)操作就會報出異常。
如果有其他對錶的操作報出這種異常,原因大致如此。