是否可以在从2个表创建的复杂视图中插入新行?

时间:2017-01-28 12:17:33

标签: sql oracle view union sql-insert

我读过Oracle语言参考资料,这种情况没有任何意义所以我们在这里......

我从2个表中编写了一个复杂的视图:

CREATE OR REPLACE NOFORCE VIEW vw_emps_hist_50_b
AS
   SELECT employee_id, first_name, last_name, 
          job_id, department_id
   FROM   employees_history
   WHERE  department_id = 50
   UNION
   SELECT employee_id, TO_CHAR(NULL), TO_CHAR(NULL),
          job_id, department_id
   FROM   employees_history_2
   WHERE  department_id = 50
WITH CHECK OPTION;

现在我正在尝试使用视图插入新行:

INSERT INTO vw_emps_hist_50_b
VALUES      (2005, 'Dexter', 'Morgan', 'ST_CLERK', 50);

Error que empieza en la línea: 46 del comando -
INSERT INTO vw_emps_hist_50_b
VALUES      (2005, 'Dexter', 'Morgan', 'ST_CLERK', 50)
Error en la línea de comandos : 46 Columna : 13
Informe de error -
Error SQL: ORA-01732: data manipulation operation not legal on this view
01732. 00000 -  "data manipulation operation not legal on this view"
*Cause:    
*Action:

有没有办法将这一行插入两个表?或者我可以选择要插入此新行的表吗?

2 个答案:

答案 0 :(得分:2)

不,是的。您无法直接插入视图;太复杂了。相反,您可以在视图本身上创建“代替”触发器。

也就是说,您可以指定更新视图时要执行的操作。一个开始的地方是关于这个主题的Oracle documentation

答案 1 :(得分:1)

执行的操作违反了策略,因为视图派生自多个表,并且您正在该视图上尝试插入操作。