虚拟列的值是计算出来的,不能再inert 语句中直接指定
SQL> create table employee_salary(name varchar2(20),monthly_salary number,weekly_salary as (round(monthly_salary*12/52,2)));
Table created.
SQL> insert into employee_salary(name,monthly_salary) values('li',888);
1 row created.
SQL> insert into employee_salary values('wang',999,111);
insert into employee_salary values('wang',999,111)
*
ERROR at line 1:
ORA-54013: INSERT operation disallowed on virtual columns
Help: https://docs.oracle.com/error-help/db/ora-54013/
SQL> commit;
Commit complete.
SQL> select * from employee_salary;
NAME MONTHLY_SALARY WEEKLY_SALARY
-------------------- -------------- -------------
li 888 204.92
SQL> select owner,table_name,column_name,data_default,virtual_column from dba_tab_cols where table_name='EMPLOYEE_SALARY';
OWNER TABLE_NAME COLUMN_NAME DATA_DEFAULT VIR
---------- ------------------------------ -------------------- ---------------------------------------- ---
SYS EMPLOYEE_SALARY NAME NO
SYS EMPLOYEE_SALARY MONTHLY_SALARY NO
SYS EMPLOYEE_SALARY WEEKLY_SALARY ROUND("MONTHLY_SALARY"*12/52,2) YES