文档解释
ORA-54013: INSERT operation disallowed on virtual columns
Cause: Attempted to insert values into a virtual column
Action: Re-issue the statment without providing values for a virtual column
这个错误代表无效的插入操作,当以INSERT操作对虚拟列进行插入时,Oracle数据库会抛出这个错误提示。
报此错误的正常原因是:**虚拟列是只读列,不能直接插入,也就是说SQL语句中不能直接使用虚拟列**,虚拟列用来派生特定的值,而不是用来存储信息,是一种特殊的一种列。比如我们在Oracle中如果有一个表定义了一个虚拟列,但是你仍调用INSERT语句,那么就会就会抛出这个错误:ORA-54013:INSERT operation disallowed on virtual columns。
官方解释
Oracle 报错ORA-54013意味着用户使用INSERT语句想插入值到虚拟列,但是由于虚拟列是只读的,所以会直接报这个错。
常见案例
比如有一个表TEST_TABLE,我们定义列CURDATE虚拟列,如果直接调用:
“`sql
insert into TEST_table values(3,sysdate);
“`
但是CURDATE是一个虚拟列,就会直接报这个错误。
正常处理方法及步骤
1. 不要直接使用INSERT语句插入值到虚拟列,虚拟列是只读的,不能进行插入操作
2. 如果要使用虚拟列,可以选择在触发器中,用BEFORE或AFTER INSERT触发器把虚拟列的值取出来,进行操作
3. 还可以通过视图展示虚拟列,将原表中的物理列转换为虚拟列,从而实现类似查询操作。